在 Bigquery 上,我有一个包含许多列的表。我想创建一个新表,显示所有列的所有不同值的计数。
我正在使用以下代码:
SELECT key AS column_name,
COUNT(DISTINCT val) AS number_of_options,
ARRAY_AGG(DISTINCT val) AS distinct_options
FROM (
SELECT TRIM(x[0], '"') AS key,
TRIM(x[1], '"') AS val
FROM t,
UNNEST(SPLIT(TRIM(TO_JSON_STRING(t), '{}'), ',"')) kv,
UNNEST([STRUCT(SPLIT(kv, '":') AS x)])
)
GROUP BY key
上面的代码使我不必指定所有列名称或循环它们。但这会引发错误“数组索引 1 超出范围(溢出)”。如果不引用 x[1] (其中包含每个行列的值),代码就可以正常工作。我尝试添加“where x[1] is not null”等,但每次代码都会抛出上述错误。
将不胜感激任何帮助。如果需要可以详细说明。
使用 x[safe_offset(1)] 有效!