Snowflake中XMLGET返回NULL问题(XML数据确认无误)
Snowflake XMLGET返回NULL的解决办法
问题根源
你使用XMLGET(section.value, '$')是想提取<section>节点的直接文本,但从提供的XML片段来看,<section>的内容都是嵌套的子节点(比如<speaker>、<plist>、<p>),没有直接的文本内容,所以这个函数返回NULL。
可行解决方案
1. 获取section下的全部内容(含子节点)
如果需要拿到<section>节点里的所有内容,用XMLSERIALIZE序列化节点即可:
SELECT t.id AS transcript_id, section.index AS section, XMLSERIALIZE(CONTENT section.value AS VARCHAR) AS section_content FROM FACTSET_OPEN_ACCESS__RD.TRANSCRIPTS.TRANSCRIPTS_OPEN t, LATERAL FLATTEN(input => XMLGET(t.raw_xml, 'body'), path => 'section') section WHERE t.id = 2676505;
2. 提取指定子节点的文本
如果只需要<p>标签里的文本内容,可以逐层定位子节点:
SELECT t.id AS transcript_id, section.index AS section, XMLGET(XMLGET(XMLGET(section.value, 'speaker'), 'plist'), 'p')::string AS section_content FROM FACTSET_OPEN_ACCESS__RD.TRANSCRIPTS.TRANSCRIPTS_OPEN t, LATERAL FLATTEN(input => XMLGET(t.raw_xml, 'body'), path => 'section') section WHERE t.id = 2676505;
3. 用XMLPATH直接定位文本
也可以通过XML路径表达式直接提取目标文本:
SELECT t.id AS transcript_id, section.index AS section, XMLPATH(t.raw_xml, '/body/section/speaker/plist/p/text()')::string AS section_content FROM FACTSET_OPEN_ACCESS__RD.TRANSCRIPTS.TRANSCRIPTS_OPEN t, LATERAL FLATTEN(input => XMLGET(t.raw_xml, 'body'), path => 'section') section WHERE t.id = 2676505;
内容的提问来源于stack exchange,提问作者Vymahesh
相关产品推荐
相关产品推荐

