Google bigquery 如何在BigQuery中将数组列组合到结构数组中?

Google bigquery 如何在BigQuery中将数组列组合到结构数组中?,google-bigquery,Google Bigquery,如何构造一个struct数组,其中数组中的每一行对应于具有相同行号的多个数组列 我将给你举一个例子,说明我想更好地说明我的问题 假设我想查询一个名为table_1的表,如下所示: 这里,col_2、col_3、col_4和col_5都是BigQuery中的数组列。我知道表1中的列2、列3和列4的行数总是相同的。我需要将它们连接到一个结构数组中,其中数组列中每一行的组合将在新数组中形成一个结构行。因此得到的数组将是x,1,s,y,2,t和z,3,u 假设这个连接的列称为comb\u col。这个

如何构造一个struct数组,其中数组中的每一行对应于具有相同行号的多个数组列

我将给你举一个例子,说明我想更好地说明我的问题

假设我想查询一个名为table_1的表,如下所示:

这里,col_2、col_3、col_4和col_5都是BigQuery中的数组列。我知道表1中的列2、列3和列4的行数总是相同的。我需要将它们连接到一个结构数组中,其中数组列中每一行的组合将在新数组中形成一个结构行。因此得到的数组将是x,1,s,y,2,t和z,3,u

假设这个连接的列称为comb\u col。这个comb\u col本质上是一个结构数组。每行是由列2、列3和列4组成的结构,如下表所示:

注意comb_col的值应该是x,1,s,y,2,t和z,3,u,而不是[x,y,z],[1,2,3],[s,t,u]

最简单的方法是什么?我尝试将UNNEST与交叉连接一起使用,但这将使交叉连接,而不是连接,因此在上面的示例中,将生成9行而不是3行组合列

我考虑过在row_number中使用row number,在交叉联接中使用UNNEST,然后只过滤那些具有相同行号的行,如下所示。我的解决方案实现了我想要的,但是,解决方案有点冗长和复杂。有没有更好更简单的方法来实现我的目标

创建临时函数添加任何类型的行号 大堆 选择为结构 数据 作为rn的行号 从UNNESTarr数据 ; 选择 身份证件 上校1, 大堆 选择为结构 c2.1列数据, c3.2列数据, c4.3列数据 从…起 未设置添加行编号COL 1 c1, 未设置添加行编号COL 2 c2, UNNESTADD_行编号COL_3 c3 其中c1.rn=c2.rn和c2.rn=c3.rn 作为科布·科尔, 第5列, 大堆 选择 col_5*10 如第5列乘以第10列 来自表1 多谢各位

有没有更好更简单的方法来实现我的目标

下面是BigQuery标准SQL

#standardSQL
SELECT id, col_1,
  ARRAY(SELECT AS STRUCT col_2, col_3, col_4 
    FROM UNNEST(col_2) col_2 WITH OFFSET 
    JOIN UNNEST(col_3) col_3 WITH OFFSET USING(OFFSET)
    JOIN UNNEST(col_4) col_4 WITH OFFSET USING(OFFSET)
  ) comb_col,
  col_5
FROM `project.dataset.table`   
这可能是一个意见问题,但在我看来,它没有那么冗长

显然,若要应用于来自您的样本数据,问题-结果和预期的一样

Row id  col_1   comb_col.col_2  comb_col.col_3  comb_col.col_4  col_5    
1   1   a       x               1               s               4    
                y               2               t               5    
                z               3               u