将MongoDB json文件加载到Google大查询中时如何转换数据类型?

时间:2018-09-02 11:51:33

标签: json mongodb casting google-bigquery

使用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文件加载数据以投射字段时,是否有解决方案?

1 个答案:

答案 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 datacastings in BigQuery的更多信息。