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

问题描述 投票:0回答:1

我使用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文件加载数据以转换字段时的任何解决方案?

json mongodb casting google-bigquery
1个回答
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}

并且第一列已作为字符串导入,第二列作为float导入。我使用了完全相同的命令:

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”。然后加载此数据。一旦上传完毕,您就可以更新列的类型。 Long explanation here。这看起来不是最便宜的解决方案。

2.-我会做什么,编写一些脚本,可能使用正则表达式,将“1.0”替换为1.0然后,在此之后,上传处理过的文件。

有关updating datacastings in BigQuery的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.