Google BigQuery 对 AvrologicalTypes 的支持

Posted

技术标签:

【中文标题】Google BigQuery 对 AvrologicalTypes 的支持【英文标题】:Google BigQuery support for Avro logicalTypes 【发布时间】:2018-05-09 09:39:12 【问题描述】:

正如 Google 声称的那样,不支持从 Avro logicalType 转换为 BigQuery 特定类型(如 here on the bottom 所述)。

但是我可以使用以下架构加载 Avro 文件:

schema = 
    'name': 'test',
    'namespace': 'testing',
    'type': 'record',
    'fields': [
        'name': 'test_timestamp', 'type': 'long', 'logicalType': 'timestamp-millis',
    ],

使用 TIMESTAMP 类型的列进入 BigQuery。

情况与以下架构不同:

schema = 
    'name': 'test',
    'namespace': 'testing',
    'type': 'record',
    'fields': [
        'name': 'testdate', 'type': 'int', 'logicalType': 'date',
    ],
 

以及包含 DATE 类型列的 BigQuery 表。我以下列方式使用 bq load(在这两种情况下):

bq --location=EU load --source_format=AVRO --project_id=test-project dataset.table "gs://bucket/test_file.avro"

但异常失败:

Field testdate has changed type from DATE to INTEGER

BigQuery 是否有可能支持 logicalTypes,或者有什么优雅的方法可以解决这种情况? (我知道使用临时表的解决方法,然后有 BQL 选择将 TIMESTAMPS 转换为 DATES,但它不是很漂亮:P)

【问题讨论】:

【参考方案1】:

现在所有 BigQuery 用户都可以公开了解 Avro 逻辑类型。请参阅此处的文档页面以获取更多详细信息:https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-avro#logical_types

【讨论】:

只想更新 API 更改已推出,并且客户现在可以使用 useAvroLogicalTypes 加载作业配置标志来选择性地为每个加载作业启用它,而无需列入白名单。我正在更新文档,但您可以在 API 发现页面 (googleapis.com/discovery/v1/apis/bigquery/v2/rest) 中找到它。如果客户认为在默认情况下启用此功能后会受到负面影响,客户还可以将其所有 Avro 加载作业设置为 false。

以上是关于Google BigQuery 对 AvrologicalTypes 的支持的主要内容,如果未能解决你的问题,请参考以下文章

google bigquery 对 firebase 函数的查询

Google BigQuery 对奇怪尝试的不完整查询回复

对 Google Bigquery 中的嵌套字段使用 OFFSET 而不是 UNNEST

通过 R Studio Server 使用 BigQuery 在 Google Compute Engine 上对服务帐户进行身份验证

将数据从键值对提取到 Google Bigquery 中的列标题

如何对一系列数据进行分组以在 GOOGLE BigQuery 中创建一个类别