如何在雪花中使用 parse_xml 忽略损坏的 xml 行

Posted

技术标签:

【中文标题】如何在雪花中使用 parse_xml 忽略损坏的 xml 行【英文标题】:How to ignore corrupted xml row with parse_xml in snowflake 【发布时间】:2020-11-09 20:38:05 【问题描述】:

函数 parse_xml 失败并显示消息 解析 XML 时出错:不是 XML 元素,位置 1,这是由于一个无效的 xml 条目,无论如何忽略无效的条目并继续。

这是背景 我通过一个存储为 varchar 的 rest 服务将 xml 数据获取到雪花表中,进一步挑选这些数据,解析为 xml 并进行过滤/处理。函数 parse_xml 在我们的例子中运行良好,但如果任何一个条目无效,它就会放弃。

下面是一个示例查询,我希望忽略“红色”并返回“绿色”而不是抛出错误。

SELECT parse_xml(XML)
FROM
  (SELECT ('<color>green</color>') XML
   UNION SELECT ('red') XML);

【问题讨论】:

【参考方案1】:

使用 check_xml() 检查 XML 的有效性:

SELECT parse_xml(XML)
FROM
  (SELECT ('<color>green</color>') XML
   UNION SELECT ('red') XML)
WHERE check_xml(XML) is NULL ;

这会根据需要返回 &lt;color&gt;green&lt;/color&gt;

【讨论】:

以上是关于如何在雪花中使用 parse_xml 忽略损坏的 xml 行的主要内容,如果未能解决你的问题,请参考以下文章

apex_web_service.parse_xml 不解析“&”字符

无法序列化 PySpark UDF

雪花:加载时出现错误限制时无法复制?

警告:忽略损坏的 ref refs/remotes/origin/HEAD

如何在雪花中使用 SQL 用户定义函数?

雪花:如何使用 .NET Core 连接到雪花