使用自动检测加载数据时出现“无效架构更新”错误

时间:2018-03-29 19:32:10

标签: google-bigquery

假设我有一个表有一个名为“version”的字段,这是一个字符串。当我尝试使用类似"1.1""1"的值的自动检测将数据加载到表中时,自动检测功能分别将这些值推断为float或integer类型。

data1.json 示例:

{ "version": "1.11.0" }

bq load输出:

$ bq load --autodetect --schema_update_option=ALLOW_FIELD_ADDITION --source_format=NEWLINE_DELIMITED_JSON temp_test.temp_table ./data1.json Upload complete. Waiting on bqjob_ZZZ ... (1s) Current status: DONE

data2.json 示例:

{ "version": "1.11" }

bq load输出:

$ bq load --autodetect --schema_update_option=ALLOW_FIELD_ADDITION --source_format=NEWLINE_DELIMITED_JSON temp_test.temp_table ./data2.json Upload complete. Waiting on bqjob_ZZZ ... (0s) Current status: DONE
BigQuery error in load operation: Error processing job 'YYY:bqjob_ZZZ': Invalid schema update. Field version has changed type from STRING to FLOAT

data3.json 示例:

{ "version": "1" }

bq load输出:

$ bq load --autodetect --schema_update_option=ALLOW_FIELD_ADDITION --source_format=NEWLINE_DELIMITED_JSON temp_test.temp_table ./data3.json Upload complete. Waiting on bqjob_ZZZ ... (0s) Current status: DONE
BigQuery error in load operation: Error processing job 'YYY:bqjob_ZZZ': Invalid schema update. Field version has changed type from STRING to INTEGER

没有发生此问题的情况是,在同一个文件中,您有另一个JSON,其值正确地推断为字符串(如Bigquery autoconverting fields in data问题中所示):

{ "version": "1.12" }
{ "version": "1.12.0" }

在上面列出的问题中,有一个答案表明修复程序已推送到生产环境,但看起来该错误又回来了。有没有办法/解决方法来阻止这种情况?

1 个答案:

答案 0 :(得分:3)

这里看起来令人困惑的部分是“1.12”应该被检测为字符串还是浮点数。 BigQuery选择检测为float。在BigQuery中引入自动检测之前,BigQuery允许用户以字符串格式加载浮点值。这在CSV / JSON格式中非常常见。因此,当引入自动检测时,它会保留此行为。自动检测最多可扫描100行以检测类型。如果对于所有100行,数据类似于“1.12”,则该字段很可能是浮点值。如果其中一行的值为“1.12.0”,那么BigQuery将检测到类型是字符串,如您所观察到的那样。