【问题标题】:How to flatten tables correcty in Big Query?如何在 Bigquery 中正确展平表格?
【发布时间】:2019-05-31 11:08:21
【问题描述】:

我有以下表格:

在表 2(黄色字段)中,第一个字段是以下内容的一部分:

name1                       RECORD      NULLABLE    
name1. name2                RECORD      REPEATED    
name1.name2. date_inserted  TIMESTAMP   NULLABLE

如您所见,第 25 行的最后一个(子行?)是灰色的,因为它是重复记录 name1.name2 的一部分

我正在尝试将表 2 与另一个字段上的表 1(橙色外观的字段)连接起来。我有 0 次记录或重复记录的经验,但使用 FLATTEN() 我设法加入了他们。

问题是,我注意到连接后第二个日期的某些日期返回 NULL,尽管之前没有任何 NULLS。因此,由于我无法弄清楚灰色单元格是什么,我想我做错了什么。

所有这些总结起来就是:我怎样才能完全展平我想要使用的所有表,以便根本没有任何记录,这样我就可以使用简单的 SQL 语句来浏览数据?请提供一个例子。寻找通用的东西。

【问题讨论】:

  • 到目前为止你做了什么?这个documentation中的例子没用吗?

标签: google-bigquery flatten


【解决方案1】:

我怎样才能完全展平我想使用的所有表,以便根本没有任何记录,这样我就可以使用简单的 SQL 语句浏览数据?

这实际上取决于您正在使用的架构。您可以对它们进行预处理、展平数组并重命名结构字段,然后将其用作基本表来处理简单的 SQL 语句

对于您的方案,您可以先像这样展平表 2、name2 列

SELECT
  name2.date_inserted -- Add additional fields you want on the result
FROM table2, table2.name1.name2

您可以进行 CROSS JOIN 和 LEFT JOIN 来进一步调整您的结果。

请提供一个例子。寻找通用的东西。

我不确定通用方法,因为每个架构可能都有不同的要求。关键概念是知道如何flatten arrays以及如何查询struct with arraysarrays of structs

您可以在该文档中找到大量示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2018-03-25
    • 1970-01-01
    • 2020-09-02
    • 2022-10-23
    • 1970-01-01
    相关资源
    最近更新 更多