在 Big Query 中,当我进行正则表达式搜索时,它只返回第一个匹配/出现。
有没有办法返回所有匹配,连接?可能是什么GROUP_CONCAT
?
REGEXP_EXTRACT(body, r"(\w+ )")
在 Big Query 中,当我进行正则表达式搜索时,它只返回第一个匹配/出现。
有没有办法返回所有匹配,连接?可能是什么GROUP_CONCAT
?
REGEXP_EXTRACT(body, r"(\w+ )")
在 BigQuery 支持的最近引入的标准 SQL 中 - 您可以尝试如下
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
不要忘记取消选中查看有关REGEXP_EXTRACT_ALL和STRING_AGG的
更多详细信息Use Legacy SQL
下的复选框Show Options
如果您对现在 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)