【问题标题】:BigQuery documentation - Why does flatten remove repetitionBigQuery 文档 - 为什么 flatten 会消除重复
【发布时间】:2017-10-06 09:36:59
【问题描述】:

我目前正在学习 BigQuery 标准 SQL。

我遵循了如何使用旧版 SQL 扁平化数据的示例,herehere

扁平化数据会生成具有相似行的堆叠数据是有道理的。

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

谁能给我解释一下?似乎 flatten 通过将嵌套数据转换为堆叠数据来生成数据重复,我觉得我不理解一些基本的东西。

【问题讨论】:

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


    【解决方案1】:

    被删除的“重复”是某个特定的列。假设您有如下数据,其中xy 的类型为INT64,而zARRAY<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 的值跨行重复,但我们已经扁平化了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;
    

    【讨论】:

    • 非常感谢 Elliott,这是一个非常好的解释。
    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2012-11-23
    相关资源
    最近更新 更多