首页 > 解决方案 > 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 个(在这个例子中)不同的行,每一行都有一个字符串值

  1. 时间戳字段:1595351350 网址:domainZ/aaaabbbbccccdddd
  2. 时间戳字段:1595351355 网址:domainZ/eeeeffffgggghhhh
  3. 时间戳字段:1595351355 网址:domainZ/iiiijjjjkkkkllll
  4. 时间戳字段:1595351356 网址:domainZ/mmmmnnnnppppoooo

标签: regexstringdesign-patternssplitgoogle-bigquery

解决方案


以下是 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

推荐阅读