BigQuery Standard SQL中能否解析XML标签?是否内置XML解析器?
在BigQuery Standard SQL中解析XML标签的可行方案
嗨,好问题!你说得太对了——用正则表达式解析XML绝对是个大坑,嵌套标签、特殊字符、格式变体分分钟就能让正则失效,专门的XML解析器才是靠谱的选择。
好在BigQuery Standard SQL确实内置了原生的XML解析能力,完全能满足你的需求,下面给你详细拆解怎么用:
核心解析函数
BigQuery提供了几个专门处理XML的实用函数,最常用的是这两个:
XML_EXTRACT(xml_string, xpath_expression):从XML字符串中提取匹配XPath表达式的第一个节点内容XML_EXTRACT_ALL(xml_string, xpath_expression):提取所有匹配XPath表达式的节点,返回一个数组
实际使用例子
1. 提取单个标签内容
假设你有这样的XML数据:
<book> <title>BigQuery Cookbook</title> <author>Jane Doe</author> </book>
要提取书名,可以这么写SQL:
SELECT XML_EXTRACT('<book><title>BigQuery Cookbook</title><author>Jane Doe</author></book>', '//title/text()') AS book_title;
返回结果就是"BigQuery Cookbook"
2. 提取多个同类型标签
如果XML里有多个相同标签,比如:
<library> <book>BigQuery Cookbook</book> <book>SQL Fundamentals</book> <book>Data Warehousing 101</book> </library>
用XML_EXTRACT_ALL提取所有书名:
SELECT XML_EXTRACT_ALL('<library><book>BigQuery Cookbook</book><book>SQL Fundamentals</book><book>Data Warehousing 101</book></library>', '//book/text()') AS all_books;
返回的是一个数组:["BigQuery Cookbook", "SQL Fundamentals", "Data Warehousing 101"]
3. 提取标签属性
如果标签带有属性,比如:
<book id="123" category="tech"> <title>BigQuery Cookbook</title> </book>
要提取id属性的值,用XPath的@语法:
SELECT XML_EXTRACT('<book id="123" category="tech"><title>BigQuery Cookbook</title></book>', '//book/@id') AS book_id;
结果是"123"
为什么比正则靠谱
这些原生函数是基于标准XPath语法实现的,能正确处理XML的嵌套结构、转义字符(比如<、&),以及各种合法的XML格式变体,完全不用担心正则那种“匹配一半就出错”的问题。
内容的提问来源于stack exchange,提问作者Jonny Brooks
相关产品推荐
相关产品推荐

