【问题标题】:How to convert the column type as XML and extract the value on Snowflake?如何将列类型转换为 XML 并提取雪花上的值?
【发布时间】:2021-04-01 00:12:40
【问题描述】:

我在表中有一个 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

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

谢谢,

【问题讨论】:

    标签: sql xml xml-parsing snowflake-cloud-data-platform


    【解决方案1】:
    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多