如何从具有 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