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



函数parse_xml失败,返回消息解析xml时出错:不是xml元素,pos 1,这是由于一个无效的xml条目造成的,是否可以忽略无效的条目并继续。

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

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

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

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

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

这将根据需要返回<color>green</color>