【问题标题】:BigQuery: --[no]use_avro_logical_types flag doesn't workBigQuery:--[no]use_avro_logical_types 标志不起作用
【发布时间】: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>

【问题讨论】:

    标签: google-bigquery


    【解决方案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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2023-03-26
    相关资源
    最近更新 更多