我在我的 bigquery 表上使用了另一篇文章中的以下查询:
WITH sample_table AS (
SELECT Column_A, Column_B
FROM my_dataset
),
splits AS (
SELECT SPLIT(Column_A, '/')[SAFE_OFFSET(1)] AS Column_A,
TRIM(kv[SAFE_OFFSET(0)], '" ') AS name,
CAST(TRIM(kv[SAFE_OFFSET(1)]) AS FLOAT64) AS value
FROM sample_table
UNNEST(SPLIT(TRIM(Column_B, '{}'), ",")) e,
UNNEST([STRUCT(SPLIT(e, ':') AS kv)])
)
SELECT Column_A, ANY_VALUE(name HAVING MAX value) Column_B
FROM splits
GROUP BY 1;
但是,当我运行它时,我只返回数据集中的第一行。
当我将 GROUP BY 1 值更改为大于 1 的值时,我收到一条错误消息,提示如果选择列号范围,则 GROUP BY 已超出。
我还尝试将它包装在一个 while 循环中:
DECLARE x INT64;
DECLARE i INT64 DEFAULT 1;
SET x = 128;
WHILE i<x DO
WITH sample_table AS (
SELECT Column_A, Column_B
FROM my_dataset
),
splits AS (
SELECT SPLIT(Column_A, '/')[SAFE_OFFSET(1)] AS Column_A,
TRIM(kv[SAFE_OFFSET(0)], '" ') AS name,
CAST(TRIM(kv[SAFE_OFFSET(1)]) AS FLOAT64) AS value
FROM sample_table,
UNNEST(SPLIT(TRIM(Column_B, '{}'), ",")) e,
UNNEST([STRUCT(SPLIT(e, ':') AS kv)])
)
SELECT Column_A, ANY_VALUE(name HAVING MAX value) Column_B
FROM splits
GROUP BY 1;
END WHILE;
这没有用。看着 CTE,我想我需要在某个地方加入。我可以使用一个唯一标识符列。为了本示例的缘故,称为 Column_C。我将如何利用它?