BigQuery:拆分具有重复模式的字符串以分隔行
Posted
技术标签:
【中文标题】BigQuery:拆分具有重复模式的字符串以分隔行【英文标题】:BigQuery: split string with repetitive pattern to separate rows 【发布时间】:2020-07-26 08:05:47 【问题描述】:我有一个重复模式的字符串,例如:timestampField: <SOME_INT_VALUE> url: <SOME_STRING_VALUE>
。正如您在示例中看到的那样,此模式返回多次(在此示例中为 4 次)。
SELECT my_string
FROM (SELECT 'timestampField: 1595351350 url: domainZ/aaaabbbbccccdddd timestampField: 1595351355 url: domainZ/eeeeffffgggghhhh timestampField: 1595351355 url: domainZ/iiiijjjjkkkkllll timestampField: 1595351356 url: domainZ/mmmmnnnnppppoooo' as my_string)
我想把这个大字符串分成 4 个(在这个例子中)不同的行,每一行都有一个字符串值
-
timestampField: 1595351350 url: domainZ/aaaabbbbccccdddd
timestampField: 1595351355 url: domainZ/eeeeffffgggghhhh
timestampField: 1595351355 url: domainZ/iiiijjjjkkkkllll
timestampField: 1595351356 url: domainZ/mmmmnnnnppppoooo
【问题讨论】:
【参考方案1】:以下是 BigQuery 标准 SQL
一种简单的方法是使用 SPLIT,如下所示
#standardSQL
SELECT 'timestampField:' || v AS part
FROM `project.dataset.table`,
UNNEST(SPLIT(my_string, 'timestampField:')) v
WHERE NOT v = ''
如果适用于您问题中的样本数据 - 输出是
Row part
1 timestampField: 1595351350 url: domainZ/aaaabbbbccccdddd
2 timestampField: 1595351355 url: domainZ/eeeeffffgggghhhh
3 timestampField: 1595351355 url: domainZ/iiiijjjjkkkkllll
4 timestampField: 1595351356 url: domainZ/mmmmnnnnppppoooo
另一个使用正则表达式的选项,输出相同
#standardSQL
SELECT part
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(my_string, r'timestampField: [^ ]* url: [^ ]*')) part
【讨论】:
两者都有效,太棒了!谢谢。 @Mikhail Berlyant 您能否解释一下第一个解决方案 -||
在 BigQuery 中的含义是什么?
它是Concatenation operator以上是关于BigQuery:拆分具有重复模式的字符串以分隔行的主要内容,如果未能解决你的问题,请参考以下文章