在 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 中将列转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中将长表转换为宽表

将 MySQL 查询转换为 BigQuery 查询

如何在presto中将列转换为数组

如何在火花中将列转换为数组[长]

pyspark 在循环中将数组转换为字符串

在 Google Dataprep 中将字符串转换为数组