regex - BigQuery:使用重复模式拆分字符串以分隔行
问题描述
我有一个重复模式的字符串,例如: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 个(在这个例子中)不同的行,每一行都有一个字符串值
- 时间戳字段:1595351350 网址:domainZ/aaaabbbbccccdddd
- 时间戳字段:1595351355 网址:domainZ/eeeeffffgggghhhh
- 时间戳字段:1595351355 网址:domainZ/iiiijjjjkkkkllll
- 时间戳字段:1595351356 网址:domainZ/mmmmnnnnppppoooo
解决方案
以下是 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
推荐阅读
- python - 从命令方法 Tkinter Python 调用的函数中取回参数
- babeljs - 使用 root babel 配置在 monorepo 中运行测试
- docker - kubernetes - 从 nginx docker 镜像中公开内容
- batch-file - 批处理:如果文件夹包含某个字符串,则跳过该文件夹
- r - 每组唯一不同的行
- android - 如何在内部存储上创建文件夹?
- javascript - componentWillReceiveProps 中的 setState 不更新状态
- reporting-services - 比较 2-Tablix 并突出显示非重复数据
- c - 如何合并两个不重复的数组?
- c++ - system() 在 for 循环 c++ 中不起作用