如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?

Posted

技术标签:

【中文标题】如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?【英文标题】:How to load an integer value in an AVRO file to a date column in bigquery? 【发布时间】:2017-05-24 18:10:01 【问题描述】:

我指的是一个类似的帖子,我发现它非常有用。它展示了我们如何将 avro 文件中的整数列加载到包含时间戳字段的 BigQuery 表中。 Compatibility of Avro dates and times with BigQuery?

我有一个类似的问题。有没有办法将 avro 文件中的整数值加载到 bigquery 中的日期列?

由于 avro 不支持日期数据类型,我尝试将日期作为字符串字段保留在 avro 中,并尝试将其加载到 BigQuery 中的日期字段中。但这不起作用。

如果我知道 BigQuery 如何在内部存储日期,也许我可以尝试将我的日期转换为该值,然后将其加载到 BQ。

有什么建议吗?

【问题讨论】:

如果您不介意尝试...如果您加载具有整数值的 Avro 文件,例如 1217311,会发生什么?如果这不起作用,一种选择是让您的表将日期存储为自 Unix 纪元以来的天数中的 INT64 类型,然后使用 DATE_FROM_UNIX_DATE 函数作为逻辑视图的一部分。 您好,感谢您的回复。这是我创建的表。它有两列。一个日期和一个整数。我的输入文件是一个简单的 csv 文件,其中包含 2 列“17167,1”。当我尝试将此文件加载到表中时出现以下错误。 bq load --format=csv rohan.temp_date dt.txt - file-00000000:无法将“17167”解析为从位置 0 开始的字段 dt(位置 0)的日期 最后一个选项是我可以尝试将日期加载为字符串并将其转换为视图中的日期。 我的意思是加载包含这些整数值的 Avro 文件,而不是 CSV 文件。如果 Avro 选项不起作用,那么逻辑视图可能是您的最佳选择。 @ElliottBrossard 我尝试从 GCS 将类型为“int”的 Avro 文件加载到 BigQuery 中,但出现以下错误 - “无法读取平板电脑:不兼容的类型。'day': INT64'天':INT32"。在 Avro 中将架构定义为“int”还是“long”似乎并不重要,BigQuery 似乎将其解释为 int64。 【参考方案1】:

无法将整数列从 Avro 直接加载到 BigQuery 中的 DATE 列中。您可以将 Avro 文件加载到具有整数列的中间表中,然后运行 ​​SQL 查询,使用 DATE_FROM_UNIX_DATE 函数 (https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#date_from_unix_date) 将此整数转换为 DATE

【讨论】:

有解决这个问题的计划吗?这样可以更轻松地将输入标准化以馈送到 BigQuery

以上是关于如何将 AVRO 文件中的整数值加载到 bigquery 中的日期列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Avro 文件加载到具有“时间戳”类型的列的 BigQuery 表中

如何读取大的avro文件,并将整个文件加载到内存中。

将 Avro 文件加载到 BigQuery 失败并出现内部错误

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

Avro 列中的 NULL 值加载为 VARIANT NULL

从 HIVE 表加载到 HDFS 作为 AVRO 文件