对 Avro logicalTypes 的 Google BigQuery 支持

dze*_*jeu 2 avro google-cloud-storage google-bigquery google-cloud-platform

正如 Google 声称不支持从 Avro 转换logicalType为 BigQuery 特定类型(如底部所述)。

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

schema = {
    'name': 'test',
    'namespace': 'testing',
    'type': 'record',
    'fields': [
        {'name': 'test_timestamp', 'type': 'long', 'logicalType': 'timestamp-millis'},
    ],
}
Run Code Online (Sandbox Code Playgroud)

到 BigQuery 类型为TIMESTAMP 的列。

以下模式的情况有所不同:

schema = {
    'name': 'test',
    'namespace': 'testing',
    'type': 'record',
    'fields': [
        {'name': 'testdate', 'type': 'int', 'logicalType': 'date'},
    ],
} 
Run Code Online (Sandbox Code Playgroud)

和具有DATE类型列的 BigQuery 表。我以下列方式使用 bq load(在两种情况下):

bq --location=EU load --source_format=AVRO --project_id=test-project dataset.table "gs://bucket/test_file.avro"
Run Code Online (Sandbox Code Playgroud)

它失败了,但有异常:

Field testdate has changed type from DATE to INTEGER
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*gna 5

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