簡體   English   中英

BigQuery 標准 SQL:如何按 ARRAY 字段分組

[英]BigQuery standard SQL: how to group by an ARRAY field

我的表有兩列, ida id包含一個數字,列a包含一個字符串數組。 我想計算給定數組的唯一 id 數,數組之間的相等性被定義為“每個索引的大小相同,字符串相同”。

使用GROUP BY a ,我得到Grouping by expressions of type ARRAY is not allowed 我可以使用GROUP BY ARRAY_TO_STRING(a, ",") ,但是兩個數組["a,b"]["a","b"]組合在一起,我失去了“真實”值我的數組(所以如果我想稍后在另一個查詢中使用它,我必須拆分字符串)。

這個字段數組中的值來自用戶,所以我不能假設某個字符永遠不會存在(並將其用作分隔符)。

而不是GROUP BY ARRAY_TO_STRING(a, ",")使用GROUP BY TO_JSON_STRING(a)

所以你的查詢將如下所示

#standardsql
SELECT 
  TO_JSON_STRING(a) arr,
  COUNT(DISTINCT id) cnt
FROM `project.dataset.table`
GROUP BY arr

您可以使用如下的虛擬數據進行測試

#standardsql
WITH `project.dataset.table` AS (
  SELECT 1 id, ["a,b", "c"] a UNION ALL
  SELECT 1, ["a","b,c"]
)
SELECT 
  TO_JSON_STRING(a) arr,
  COUNT(DISTINCT id) cnt
FROM `project.dataset.table`
GROUP BY arr  

結果為

Row     arr             cnt  
1       ["a,b","c"]     1    
2       ["a","b,c"]     1    

根據@Ted的評論更新

#standardsql
SELECT 
  ANY_VALUE(a) a,
  COUNT(DISTINCT id) cnt
FROM `project.dataset.table`
GROUP BY TO_JSON_STRING(a)

或者,您可以使用逗號以外的其他分隔符

ARRAY_TO_STRING(a,"|")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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