使用bq
加载数据时遇到的问题是,例如,对于名为cost
的字段,我具有字符串和整数值。它的值为0或字符串值“ 1.0”,以此类推。因此,每条记录的数据类型不同。
我目前用来加载数据的是:
bq load --autodetect --ignore_unknown_values=true --max_bad_records=100 --project_id=my-proj-100605 --source_format=NEWLINE_DELIMITED_JSON my_dataset.my_table ./mongo_export.json
它给出以下错误:
BigQuery error in load operation: Error processing job 'my-proj-100605:bqjob_r2cfcfa271ed999bb_0059a0fba75_1': Invalid
schema update. Field to has changed type from INTEGER to STRING
从json文件加载数据以投射字段时,是否有解决方案?
答案 0 :(得分:0)
在上传数据时,您不能专门转换类型。您必须在加载数据之后或之前进行转换。正如我在示例中所看到的,某些转换是自动完成的。如果您了解如何自动完成转换,则可以指定一种转换。继续阅读以获得更好的理解:
我已经使用UI和CLI通过以下方式进行了测试:
{"col1": "b", "col2": 0} {"col1": "c", "col2": 0} {"col1": "d", "col2": "1.0"} {"col1": "e", "col2": "1.0"} {"col1": "f", "col2": "1.0"} {"col1": "g", "col2": 0} {"col1": "h", "col2": 0} {"col1": "i", "col2": 0}
第一列已作为字符串导入,第二列已作为浮点导入。我使用了完全相同的命令:
bq load --autodetect --ignore_unknown_values=true --max_bad_records=100 --project_id=MYPROJECTid --source_format=NEWLINE_DELIMITED_JSON dataset.tablename ./jsontoimp.json
所以我无法复制您的问题,对我来说没关系。无论如何,如果无法正确识别它,您有两个选择:
1.-只需使用此列将模式指定为字符串或编写一些脚本以将0替换为“ 0”即可。然后加载此数据。全部上传后,您可以更新列的类型。 Long explanation here。这看起来不是最便宜的解决方案。
2.-我要做的是,编写一些脚本(也许使用正则表达式),以将“ 1.0”替换为1.0,然后再上传处理过的文件。
有关updating data和castings in BigQuery的更多信息。