在 BigQuery 中将列转换为数组
Posted
技术标签:
【中文标题】在 BigQuery 中将列转换为数组【英文标题】:Turn columns into array in BigQuery 【发布时间】:2021-05-10 18:46:56 【问题描述】:我想要一张这样的桌子:
key | col1 | col2 | col3 |
---|---|---|---|
"a" | 0 | 2 | 3 |
"b" | 1 | 1 | 3 |
"c" | 5 | 0 | 2 |
"d" | 0 | 0 | 1 |
把它变成这样:
key | col |
---|---|
"a" | [0, 2, 3] |
"b" | [1, 1, 3] |
"c" | [5, 0, 2] |
"d" | [0, 0, 1] |
基本上,我想将列合并到一个数组中。在现实生活中,我有 60 列,全部包含整数。如果这更容易,我也会采用结构。基本上,我不想动态处理 60 个列名。
我似乎无法在任何地方找到答案,这让我感到困惑 - 这一定是一个常见的用例?我一定很晚了……
【问题讨论】:
select "key", [col1, col2, ... ] as col
【参考方案1】:
用array
怎么样?
select key, array[col1, col2, col3] as cols
from t;
【讨论】:
呃!我一直将“数组”视为一种方法,以及将其用作方法的示例,但由于它需要 SELECT 作为参数而不起作用 - 我以前从未在 sql 中使用过数组 :) 关于如何使用的任何提示动态地做到这一点?我有 60 列遵循编号命名模式... @ElisabethGuegan。 . .我建议你问一个新的问题。这回答了这里提出的问题。【参考方案2】:考虑以下方法
select key,
(
select array_agg(cast(value as int64))
from unnest(split(trim(format('%t', (select as struct * except(key) from unnest([t]))), '()'))) value
) col
from `project.dataset.table` t
如果应用于您问题中的样本数据 - 输出是
【讨论】:
你有机会尝试吗?以上是关于在 BigQuery 中将列转换为数组的主要内容,如果未能解决你的问题,请参考以下文章