在BigQuery中如何用REGEXP_EXTRACT_ALL与SPLIT拆分字段为多行?
BigQuery按'§'拆分字段并转为多行的解决方案
要实现将message字段按'§'拆分后每行显示一个内容,核心是用SPLIT函数拆分字符串为数组,再通过UNNEST将数组展开为多行记录,具体SQL示例如下:
基础用法(仅输出拆分后的内容)
SELECT split_item FROM your_table, UNNEST(SPLIT(message, '§')) AS split_item
保留原表其他字段的用法
如果需要同时保留原表的其他字段(比如主键、时间戳等),可以这样写:
SELECT id, create_time, split_item FROM your_table, UNNEST(SPLIT(message, '§')) AS split_item
针对你提供的示例数据
假设message字段值为-ABC/12§HAVEANICEDAY§JANEDOE@EMAIL.COM§XXXXXXXXXXXX1234,执行上述SQL后会输出4行结果:
-ABC/12
HAVEANICEDAY
JANEDOE@EMAIL.COM
XXXXXXXXXXXX1234
为什么之前的尝试没成功
REGEXP_EXTRACT_ALL(message, '*§')正则表达式写法错误,正确的正则匹配逻辑复杂且没必要,用SPLIT更直接高效;SPLIT(message, '§')[SAFE_OFFSET(0)]仅提取了拆分后数组的第一个元素,没有将整个数组展开为多行,必须配合UNNEST才能实现每行一个内容的需求。
内容的提问来源于stack exchange,提问作者Vicki
相关产品推荐
相关产品推荐

