[英]Extracting data from a column
我的數據如下所示 -
id a_json
111 {key:A,values:[123,2345,2345,456,78,9]}
222 {key:A,values:[1112, 323, 11, 11]}
我想提取方括號(值)中的唯一數字。 以下是我嘗試過的 -
SELECT
id,
REGEXP_EXTRACT_ALL(a_json, r'([0-9]+)*(,[0-9]+)*'),
a_json
FROM
`project.dataset.table`
WHERE
a_json like "%values%"
GROUP BY
id,
a_json
但這給了我以下錯誤-
Regular expression passed to REGEXP_EXTRACT_ALL must not have more than 1 capturing group
我希望結果看起來像 -
id a_json numbers
111 {key:A,values:[123,2345,2345,456,78,9]} 123,2345,456,78,9
222 {key:A,values:[1112,323,11,11]} 1112,323,11
這是可行的嗎?
你應該使用下面的正則表達式
REGEXP_EXTRACT_ALL(a_json, r'\d+') as numbers
在這種情況下 output 將是
Row id a_json numbers
1 111 {key:A,values:[123,2345,456,78,9]} 123
2345
456
78
9
2 222 {key:A,values:[1112, 323, 11]} 1112
323
11
作為替代方案 - 您可以使用以下版本 - 在這種情況下,您可以省略WHERE a_json like "%values%"
SPLIT(REGEXP_EXTRACT(a_json, r'values:\[(.*)]')) numbers
與完全相同的 output
我想以逗號分隔格式查看結果。 另外,我忘了在問題中提到我需要在執行此操作時檢查唯一值。
下面簡單的調整就可以了
#standardSQL
WITH `project.dataset.table` AS (
SELECT 111 id, '{key:A,values:[123,2345,2345,456,78,9]}' a_json UNION ALL
SELECT 222, '{key:A,values:[1112, 323, 11, 11]}'
)
SELECT id, a_json,
(SELECT STRING_AGG(DISTINCT number) FROM UNNEST(SPLIT(REGEXP_EXTRACT(a_json, r'values:\[(.*)]'))) number) numbers
FROM `project.dataset.table`
與 output
Row id a_json numbers
1 111 {key:A,values:[123,2345,2345,456,78,9]} 123,2345,456,78,9
2 222 {key:A,values:[1112, 323, 11, 11]} 1112, 323, 11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.