分区 BigQuery 表,从 AVRO 加载

Posted

技术标签:

【中文标题】分区 BigQuery 表,从 AVRO 加载【英文标题】:Partitioning BigQuery table, loaded from AVRO 【发布时间】:2020-03-30 13:24:42 【问题描述】:

我有一个 bigquery 表,其数据是从 GCS 上的 AVRO 文件加载的。这不是外部表。

每个 AVRO 对象中的一个字段是 created(日期为 long 类型),我想使用该字段对表进行分区。

最好的方法是什么?

谢谢

【问题讨论】:

为什么 AVRO 很重要?这是 GCS 中的联合表,还是该问题的陈述是否正确:“这不是外部表”? 【参考方案1】:

阻止使用created 作为分区列的两个问题:

avro 文件在加载期间定义架构。在此步骤中只有一个分区选项:选择 Partition By Ingestion Time,但是,很可能会为此目的包含另一个字段。

创建的字段很长。该值似乎包含一个日期时间。如果它是 Integer,您将能够以某种方式使用 Integer Range 分区表。但在这种情况下,您需要将 long 值转换为日期/时间戳才能使用date/timestamp partitioned tables。

所以,我认为你可以试试:

    将数据原样导入第一个表中。 创建第二个空表,由created 分区,类型为TIMESTAMP。 执行从第一个表读取的查询并在created 上应用时间戳函数,如TIMESTAMP_SECONDS(或 TIMESTAMP_MILLIS)以将值转换为 TIMESTAMP,因此您插入的每个值都将被分区。

【讨论】:

以上是关于分区 BigQuery 表,从 AVRO 加载的主要内容,如果未能解决你的问题,请参考以下文章

从 AVRO 加载到 BigQuery - 在目标表中指定十进制类型

如何从具有 DATE 列的 BigQuery 表中导出 AVRO 文件并将其再次加载到 BigQuery

通过 CLI 将存储桶中的 AVRO 加载到具有日期分区的 BigQuery 中

创建按一/多列分区的 BigQuery 外部表

将 avro 十进制数据加载到 BigQuery 中?

对超过 4000 天数据的 bigquery 表进行分区?