【问题标题】:Is it possible to partition nested tables in BigQuery?是否可以在 BigQuery 中对嵌套表进行分区?
【发布时间】:2022-01-09 08:08:57
【问题描述】:

我目前正在将我的数据仓库迁移到 BigQuery。我一直在尝试对数据库进行非规范化,因为我已经读到它可以产生更有效和更便宜的查询。但是,这导致了许多嵌套表。如果每个嵌套表都有一个列“created_at”和“last_modified_at”,有什么方法可以使用这些值中的任何一个来对我的表进行分区?

【问题讨论】:

    标签: google-bigquery partitioning denormalization


    【解决方案1】:

    不,您不能通过嵌套表对表进行分区。根据the docs

    您可以通过以下方式对 BigQuery 表进行分区:

    时间单位列:表根据 TIMESTAMP、DATE、 或表中的 DATETIME 列。

    摄取时间:表根据时间戳进行分区 BigQuery 会提取数据。

    整数范围:基于整数列对表进行分区。

    此外,分区必须是顶级字段,不能是 RECORD (STRUCT) 中的叶字段:

    限制

    您不能使用旧版 SQL 来查询分区表或 将查询结果写入分区表。

    时间单位列分区表受以下约束 限制:

    分区列必须是标量 DATE、TIMESTAMP 或 日期时间列。虽然列的模式可以是 REQUIRED 或 NULLABLE,它不能重复(基于数组)。分区列 必须是顶级字段。您不能使用 RECORD 中的叶字段 (STRUCT) 作为分区列。

    整数范围分区表 受到以下限制:

    分区列必须是 INTEGER 列。而模式 该列可能是 REQUIRED 或 NULLABLE,不能重复 (基于数组)。分区列必须是顶级字段。你 不能使用 RECORD (STRUCT) 中的叶字段作为分区 列。

    虽然您可以在 BigQuery 中对聚集表使用更多数据类型,但不能使用 RECORD (STRUCT) 列对表进行聚集:

    集群列必须是顶级的、非重复的列之一 以下类型:

    DATE BOOL GEOGRAPHY INT64 NUMERIC BIGNUMERIC STRING TIMESTAMP DATETIME

    如果您进行分区的原因是为了提高日期/时间查询的效率,并且如果每个嵌套表涵盖相似的时间范围,我建议将表取消嵌套到父表中。如果您不想取消嵌套表,则将另一列添加到主表中可能会有所帮助,其中包含嵌套表中最早或最晚的日期并按新列进行分区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 2012-03-21
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      相关资源
      最近更新 更多