Google BigQuery。使用Avro格式导入DATETIME字段

问题描述 投票:0回答:1

我有一个从Oracle数据库下载数据的脚本,并将其上传到Google BigQuery。这是通过写入Avro文件来完成的,然后使用BQ的python框架直接上传。我上传数据的BigQuery表有预定义的模式,其中有些包含DATETIME字段。

由于BigQuery现在已经支持Avro逻辑字段了。现在,导入时间戳数据已经没有问题了。但是,我仍然无法导入日期时间字段。我试着使用字符串,但是得到了以下错误。

Field CHANGED has incompatible types. Configured schema: datetime; Avro file: string.

我还尝试在导出时将字段数据转换为时间戳,但在BigQuery中产生了一个内部错误。

An internal error occurred and the request could not be completed. Error: 3144498

是否可以使用Avro导入日期时间字段?

google-bigquery avro
1个回答
0
投票

在Avro中,逻辑数据类型必须包括以下内容 attribute logicalType这可能是这个字段没有包含在你的模式定义中。

这里 有几个例子,比如下面这个。据我所知,类型可以是int或long,但logicalType应该是date。

{
'name': 'DateField', 
'type': 'int',
'logicalType': 'date'
}

一旦设置了逻辑数据类型,再试一次。文档确实表明它应该可以工作。

Avro logical type --> date  
Converted BigQuery data type --> DATE

如果你得到一个错误的信息,检查一下你的avro文件的模式会很有帮助, 你可以用这个命令来获得它的细节。

java -jaravro-tools-1.9.2.jargetschema my-avro-file.avro

你可以使用这个命令来获得它的细节: UPDATE

对于仅有DATE不能工作的情况,请考虑TIMESTAMP可以存储日期和时间,并以 微纳秒数 从unix epoch,1970年1月1日00:00:00.000000 UTC(UTC似乎是avro的默认值)。此外,存储在avro文件中的值(类型为DATE o TIMESTAMP)是独立于特定时区的,在这个意义上,它与BigQuery非常相似。时间戳 数据类型:

© www.soinside.com 2019 - 2024. All rights reserved.