簡體   English   中英

從列中提取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM