BigQuery返回正则表达式

时间:2016-05-08 05:25:33

标签: sql google-bigquery re2

在Big Query中,当我进行正则表达式搜索时,它只返回第一个匹配/匹配。

有没有办法返回所有匹配,连接?像GROUP_CONCAT这样的东西?

REGEXP_EXTRACT(body, r"(\w+ )")

1 个答案:

答案 0 :(得分:2)

最近推出的标准SQL受BigQuery支持 - 您可以尝试如下

SELECT 
  body,
  (SELECT STRING_AGG(word) FROM words.word) AS words
FROM (
  SELECT 
    body, REGEXP_EXTRACT_ALL(body, r'(\w+)') AS word
  FROM (
    SELECT 'abc xyz qwerty asd' AS body UNION ALL
    SELECT 'zxc dfg 345' AS body
  )
) words

请勿忘记取消选中显示选项下的Use Legacy SQL复选框 详情请见REGEXP_EXTRACT_ALLSTRING_AGG

如果您遇到BigQuery中现在称为遗留SQL的内容 - 您可以尝试类似下面的内容

SELECT 
  body, 
  GROUP_CONCAT(SPLIT(body, ' ')) AS words
FROM 
  (SELECT 'abc xyz qwerty asd' AS body),
  (SELECT 'zxc dfg 345' AS body)

我明白,这不一定是你所需要的 - 但可能会有所帮助

使用BigQuery旧版SQL的另一种方法更适合您必须使用正则表达式的情况 例如 - 假设您只需从主体中提取数字 想法是使用REGEXP_REPLACE对来自身体的数字进行核对,然后应用上述SPLIT() + GROUP_CONCAT()

SELECT 
  body, 
  GROUP_CONCAT(SPLIT(REGEXP_REPLACE(body, r'(\D)+', ':'), ':')) AS words
FROM 
  (SELECT 'abc 123 xyz 543 qwerty asd' AS body),
  (SELECT '987zxc 123 dfg 345' AS body)