分区 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