【发布时间】:2016-04-20 08:38:08
【问题描述】:
Google BigQuery 在March 23, 2016 announced“添加了对加载操作的 Avro 源格式的支持,并作为 BigQuery API 或命令行工具中的联合数据源”。它说here“这是 Avro 格式支持的 Beta 版本。此功能不包含在任何 SLA 或弃用政策中,并且可能会受到向后不兼容的更改。”。但是,我希望该功能能够正常工作。
我没有找到任何关于如何使用 Avro 格式进行加载的代码示例。我也没有找到关于如何使用bq-tool 进行加载的示例。
这是我的实际问题。我无法将 Avro 格式的数据加载到 BigQuery。
使用bq-tool 会发生以下情况。数据集、表名和桶名已被混淆:
$ bq extract --destination_format=AVRO dataset.events_avro_test gs://BUCKET/events_bq_tool.avro
Waiting on bqjob_r62088699049ce969_0000015432b7627a_1 ... (36s) Current status: DONE
$ bq load --source_format=AVRO dataset.events_avro_test gs://BUCKET/events_bq_tool.avro
Waiting on bqjob_r6cefe75ece6073a1_0000015432b83516_1 ... (2s) Current status: DONE
BigQuery error in load operation: Error processing job 'dataset:bqjob_r6cefe75ece6073a1_0000015432b83516_1': An internal error occurred and the request could not be completed.
基本上,我是从一个表中提取并插入到同一个表中,从而导致内部错误。
此外,我有一个 Java 程序,它执行相同的操作(从表 X 中提取并加载到表 X),结果相同(内部错误)。但我认为上面尽可能清楚地说明了这个问题,因此我没有在这里分享代码。在 Java 中,如果我从一个空表中提取并插入它,插入作业不会失败。
我的问题是
- 我认为 BigQuery API 永远不会因内部错误而失败。为什么我的测试会发生这种情况?
- 提取的 Avro 文件是否与插入作业兼容?
- 似乎没有规范插入作业中的 Avro 架构是什么样的,至少我找不到。可以创建文档吗?
2016 年 4 月 25 日更新:
到目前为止,我已经设法让 Avro 加载作业不给出基于不使用 REQUIRED 字段的提示的内部错误。但是,我还没有设法加载非空值。
考虑这个 Avro 模式:
{
"type": "record",
"name": "root",
"fields": [
{
"name": "x",
"type": "string"
}
]
}
BigQuery 表有一列,x,即NULLABLE。
如果我插入 N 行(我已经尝试过一两行)(x 是例如 1),我在 BigQuery 中得到 N 行,但 x 始终具有值 null。
如果我将表格更改为 X 为 REQUIRED,则会出现内部错误。
【问题讨论】:
标签: google-bigquery avro