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
レガシー 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)