我目前正在学习 BigQuery 标准 SQL。
展平数据生成具有相似行的堆叠数据是有道理的。
但是,在描述从 Legacy SQL 迁移到 Standard SQL 的文档中,它描述了如何执行相同的展平操作。对此的子标题称为使用 Flatten 去除重复。
有人可以向我解释一下吗?似乎 flatten 通过将嵌套数据转换为堆叠数据来生成数据重复,我觉得我不理解一些基本的东西。
我目前正在学习 BigQuery 标准 SQL。
展平数据生成具有相似行的堆叠数据是有道理的。
但是,在描述从 Legacy SQL 迁移到 Standard SQL 的文档中,它描述了如何执行相同的展平操作。对此的子标题称为使用 Flatten 去除重复。
有人可以向我解释一下吗?似乎 flatten 通过将嵌套数据转换为堆叠数据来生成数据重复,我觉得我不理解一些基本的东西。
被删除的“重复”是某个特定的列。假设您的数据看起来像这样, wherex
和y
has type INT64
and z
is an ARRAY<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
请注意,我们实际上是在添加重复,因为 和 的值x
跨行y
重复,但我们已经扁平化了 的重复结构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
:
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 AS t,
t.z AS z;