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

Posted

技术标签:

【中文标题】如何从具有 DATE 列的 BigQuery 表中导出 AVRO 文件并将其再次加载到 BigQuery【英文标题】:How to export AVRO files from a BigQuery table with a DATE column and load it again to BigQuery 【发布时间】:2018-07-06 08:05:10 【问题描述】:

为了从位于美国的 BigQuery (BQ) 表中移动数据,我想将该表导出到美国的 Cloud Storage (GCS) 存储桶,将其复制到欧盟存储桶,然后从那里再次导入.

问题在于 AVRO 不支持 DATE 类型,但这对我们来说至关重要,因为我们使用的是新的 partitioning feature,它不依赖于摄取时间,而是表本身的列。

AVRO 文件包含 DATE 列作为 STRING,因此 尝试通过bq load 加载文件时抛出Field date has changed type from DATE to STRING 错误。

有一个 similar question,但它与时间戳有关 - 在我的情况下,它绝对需要是 DATE,因为日期不携带时区信息,并且时间戳总是由 BQ 以 UTC 解释。

在使用NEWLINE_DELIMITED_JSON 时可以使用,但是是否可以使用 AVRO 文件进行此操作?

【问题讨论】:

为什么一定要使用 AVRO?如果它适用于 NJSON,那么为什么不这样做呢?或 CSV。 AVRO 包含架构,JSON 和 CSV 不包含 请参阅the feature request for logical types。您也可以注册白名单。 太棒了@ElliotBrossard!我已注册将项目列入白名单 只是在重新加载时指定架构。这对你来说是个问题吗? 【参考方案1】:

正如@ElliottBrossard 在 cmets 中指出的那样,有一个关于此的公共功能请求,可以在其中注册白名单。

【讨论】:

以上是关于如何从具有 DATE 列的 BigQuery 表中导出 AVRO 文件并将其再次加载到 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

如何从跨两个 DATE 列的 INNER JOIN 创建 MIN 和 MAX 日期列,其中每个 DATE 列来自单独的表 BigQuery

无法从具有数组和结构的 BigQuery 表中提取键值对

在 C# 中插入具有重复记录列的 BigQuery 行

有没有办法从 BigQuery 的表中获取所有列的不同值?

如何编写 BigQuery/SQL 查询以将一个表中的列的平均值与第二个/另一个表中的列相除

如何从具有字典列表的表中查询,仅针对某些键 (BigQuery) SQL