BigQuery:--[no]use_avro_logical_types 标志不起作用
Posted
技术标签:
【中文标题】BigQuery:--[no]use_avro_logical_types 标志不起作用【英文标题】:BigQuery: --[no]use_avro_logical_types flag doesn't work 【发布时间】:2018-11-19 11:31:14 【问题描述】:我尝试使用带有--[no]use_avro_logical_types
标志的bq
命令将avro 文件加载到执行该命令之前不存在的BigQuery 表中。 avro 模式包含timestamp-millis
逻辑类型值。执行命令时,会创建一个新表,但其列的架构变为INTEGER
。
这是最近发布的功能,因此我找不到示例,也不知道我缺少什么。谁能给我一个很好的例子?
我的 avro 架构如下所示,
...
,
"name" : "timestamp",
"type" : [ "null", "long" ],
"default" : null,
"logicalType" : [ "null", "timestamp-millis" ]
,
...
执行命令是这样的:
bq load --source_format=AVRO --use_avro_logical_types <table> <path/to/file>
【问题讨论】:
【参考方案1】:要使用timestamp-millis逻辑类型,可以通过以下方式指定字段:
"name" : "timestamp",
"type" : "type": "long", "logicalType" : "timestamp-millis"
为了提供可选的“null”值,您可以尝试以下规范:
"name" : "timestamp",
"type" : ["null", "type" : "long", "logicalType" : "timestamp-millis"]
有关支持的 Avro 逻辑类型的完整列表,请参阅 Avro 规范:https://avro.apache.org/docs/1.8.0/spec.html#Logical+Types。
【讨论】:
您建议的第一个有效!在允许“null”值的情况下,以下架构可以代替您的第二个架构。"type" : [ "null", "type" : "long", "logicalType" : "timestamp-millis" ]
谢谢!
对可选字段的第二个模式进行了很好的更正。谢谢。【参考方案2】:
根据 https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-avro,avro 类型 timestamp-millis
在 BigQuery 中加载后会转换为 INTEGER
。
【讨论】:
根据issuetracker.google.com/issues/35905894,支持逻辑类型的功能现在似乎可用。以上是关于BigQuery:--[no]use_avro_logical_types 标志不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何返回我的大型 Google BigQuery v2 响应?