[英]BigQuery standard SQL: how to group by an ARRAY field
我的表有兩列, id
和a
。 列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.