1

Big Query で正規表現検索を行うと、最初の一致 / 出現のみが返されます。

すべての一致を連結して返す方法はありますか? GROUP_CONCAT多分のようなもの?

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

4

1 に答える 1

8

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


レガシー SQL と呼ばれる現在 BigQuery にあるものに行き詰まっている場合は、以下のようなものを試すことができます

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)
于 2016-05-08T05:55:13.657 に答える