BigQuery文档 - 为什么flatten删除重复

时间:2017-10-06 09:36:59

标签: google-bigquery flatten standard-sql legacy-sql

我正在学习BigQuery标准SQL。

我已经按照如何使用旧版SQL herehere展平数据的示例。

将数据展平生成具有相似行的堆叠数据是有道理的。

但是,在描述从旧版SQL迁移到标准SQL的文档中,它描述了如何执行相同的展平操作。此子标题称为Removing Repitition with Flatten

有人可以向我解释一下吗?看似flatten通过将嵌套数据转换为堆叠数据来生成重复数据,我觉得我不理解基本的东西。

1 个答案:

答案 0 :(得分:1)

被删除的“重复”是某个特定列。假设您的数据如下所示,其中xy的类型为INT64zARRAY<INT64>

x   y   z
-----------------
1   2   [3, 4, 5]
6   7   [8, 9]

在这种情况下展平意味着删除重复的z,这样您最终只能在输出中使用INT64列类型而不使用ARRAY类型,这会将数据转换为以下内容形状:

x   y   z
---------
1   2   3
1   2   4
1   2   5
6   7   8
6   7   9

请注意,我们实际上是添加重复,因为xy的值在行间重复,但我们已经将{{1}的重复结构弄平了}}。在查询表单中,您可以尝试以下示例。第一个只显示数据的初始形状:

z

此示例显示“展平”WITH Input AS ( SELECT 1 AS x, 2 AS y, [3, 4, 5] AS z UNION ALL SELECT 6, 7, [8, 9] ) SELECT x, y, z FROM Input; 后的数据:

z