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 标志不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中转置输出

BigQuery 重复的 rank() 数字

如何返回我的大型 Google BigQuery v2 响应?

如何在 BigQuery SQL 中将一组用户分组为 10 个群组?

BigQuery:选择窗口中的第n个最小值,按另一个值排序

BigQuery 传输与 BigQuery 负载