如何将列类型转换为 XML 并提取 Snowflake 上的值?

How to convert the column type as XML and extract the value on Snowflake?

我在 table 中有一个 XML 列作为 varchar 类型。我想将其转换为 XML 列类型并提取 Transfer.

的值

这就是我的每一行值的样子。

<PropBag>
<Prop Name="Sub" Value="0"/>
<Prop Name="Adjustments 2" Value="0"/>
<Prop Name="Adjustments 3" Value="0"/>
<Prop Name="car" Value="1"/>
<Prop Name="Answers" Value="3"/>
<Prop Name="Transfer" Value="No"/>
<Prop Name="Applied" Value="No"/>
</PropBag>

我已经尝试转换为 to_variant 类型并应用了 XMLGET 函数,但仍然没有成功。

select XMLGET(to_variant (column),'Prop Bag', 0 ), column from table

雪花新手。任何帮助将不胜感激。

谢谢,

select PARSE_XML('<PropBag>
<Prop Name="Sub" Value="0"/>
<Prop Name="Adjustments 2" Value="0"/>
<Prop Name="Adjustments 3" Value="0"/>
<Prop Name="car" Value="1"/>
<Prop Name="Answers" Value="3"/>
<Prop Name="Transfer" Value="No"/>
<Prop Name="Applied" Value="No"/>
</PropBag>') as xml
    ,XMLGET(xml,'PropBag', 0 )
    ,GET(xml, '$') 
    ,GET(xml, '@attrname')
    ,GET(xml, '@')
    ,XMLGET(xml, 'Prop', 0 )
    ;

给予

XMLGET(XML,'PROPBAG', 0 )
NULL

GET(XML, '$')
[
  {
    "$": "",
    "@": "Prop",
    "@Name": "Sub",
    "@Value": 0
  },
  {
    "$": "",
    "@": "Prop",
    "@Name": "Adjustments 2",
    "@Value": 0
  },
  {
    "$": "",
    "@": "Prop",
    "@Name": "Adjustments 3",
    "@Value": 0
  },
  {
    "$": "",
    "@": "Prop",
    "@Name": "car",
    "@Value": 1
  },
  {
    "$": "",
    "@": "Prop",
    "@Name": "Answers",
    "@Value": 3
  },
  {
    "$": "",
    "@": "Prop",
    "@Name": "Transfer",
    "@Value": "No"
  },
  {
    "$": "",
    "@": "Prop",
    "@Name": "Applied",
    "@Value": "No"
  }
]

GET(XML, '@ATTRNAME')
NULL


GET(XML, '@')
"PropBag"

XMLGET(XML, 'PROP', 0 )
<Prop Name="Sub" Value="0"></Prop>

因此,根据 XMLGET 文档,这意味着您“不需要”访问顶级 PropBag,因为您已经拥有它。因此要求它不起作用,而要求 Prop 确实有效..

这个也可以看GET(xml, '$')就是“提取内容”

在这些 examples 中,您会看到它读取文档和 "$" 上的 FLATTEN,它在子对象上循环。

喜欢:

SELECT
    auction_announcement.index as auction_contents_index,
    auction_announcement.value as auction_contents_value
FROM treasury_auction_xml,
LATERAL FLATTEN(to_array(treasury_auction_xml.src_xml:"$" )) xml_doc,
LATERAL FLATTEN(to_array(xml_doc.VALUE:"$" )) auction_announcement;