如何在bigquery标准sql中展平结构?

时间:2017-08-24 15:43:20

标签: google-bigquery

使用下面的标准sql查询,我可以在BigQuery中返回一个包含a和b中所有字段的结构表。

SELECT a, b
FROM first_table a
JOIN second_table b
ON a.key = b.key;

生成的表架构将a作为RECORD,b作为RECORD,其中a.field1,a.field2,b.field1,b.field2等都具有原始类型

如果我将此表保存为a_join_b,然后在legacy_sql中查询它:

SELECT *
FROM a_join_b
;

它将展平结构并提供一个表格,其中包含名为a_field1,a_field2,...,b_field1,b_field2的字段。请注意表名和字段名之间的下划线,并且a和b可以具有相似的字段名称。

BigQuery Standard SQL是否有办法在不引用单个记录名称的情况下展平表格?我在How to convert a nested flatten into Standard SQL中查看了UNNEST,但解决方案似乎需要加入必须命名的unnested字段。

2 个答案:

答案 0 :(得分:1)

如果ab没有数组,则非常简单:

SELECT *
FROM first_table a
JOIN second_table b
USING (key)

SELECT a.*, b.* EXCEPT (key)
FROM first_table a
JOIN second_table b
ON a.key = b.key

如果它们确实包含数组,那么它依赖于那些数组的布局(UNNEST仅指数组,所以我怀疑它们可能)。如果可以的话,你能澄清一下表的布局吗?

答案 1 :(得分:0)

Mikhail Berlyant在his reply中提供了已确认的解决方案,以及#34;有没有办法在BigQuery Standard SQL中添加连接的tablename?"堆栈中的问题。