【问题标题】:How can I load parquet files in BigQuery forcing string type?如何在 BigQuery 强制字符串类型中加载镶木地板文件?
【发布时间】:2021-11-03 15:16:51
【问题描述】:

我想将 parquet 文件中的数据仅使用 STRING 类型加载到 BigQuery 中。我想强制所有数据保留为 STRING 类型,以避免将来由于与其他文件的类型不兼容而导致任何加载失败。

我有不同类型的镶木地板文件:STRING, FLOAT...

我创建了一个只有 STRING 类型的 bigquery 表。

我运行此命令以将 parquet 文件中的数据加载到 BigQuery 中:

bq load --source_format=PARQUET --noreplace --noautodetect --parquet_enum_as_string=true --decimal_target_types=STRING [project]:[dataset].[tables] gs://[bucket]/[file].parquet

我收到此错误:

BigQuery error in load operation: Error processing job '[project]:[job]': Provided Schema does not match Table [project]:[dataset].[table]. Field [attribut] has
changed type from STRING to FLOAT

我尝试使用相同的命令将镶木地板数据导入到一个不存在的表中,它使用 FLOAT 属性。

如您所见,我尝试添加参数

--noautodetect

--parquet_enum_as_string=true

--decimal_target_types=STRING

强制转换为字符串并停止自动检测,但这并不能解决我的需求。

请问你知道如何强制STRING 输入吗?

【问题讨论】:

  • Parquet 文件中包含架构信息。阅读此链接hackolade.com/help/Parquetschema.html。架构应该匹配黑白表和文件
  • 我们不能在加载到大查询时强制转换字符串吗?

标签: string google-bigquery parquet


【解决方案1】:

在使用 parquet 文件加载数据时,您可以更改解析数据 [1] 类型的方式。有一些 parquet 数据类型可以转换为多种 BigQuery 数据类型[2]。 您需要做的是转到 Parquet 架构并将要解析的数据类型添加到 BigQuery。

应该是这样的:

optional float my_col (STRING);

另一个好的做法是将架构添加到bq load command 中,例如:

bq load --source_format=PARQUET --noreplace --noautodetect --parquet_enum_as_string=true --decimal_target_types=STRING [project]:[dataset].[tables] gs://[bucket]/[file].parquet timestamp_col:TIMESTAMP,integer_col:INTEGER,string_col:STRING,my_col:STRING

[1]https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-parquet#parquet_conversions [2]https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-parquet#type_conversions

【讨论】:

  • 感谢您的回答。我会检查你的第一个选项。对于第二个选项:当表已经存在时,添加架构会产生错误,因为它与表架构冲突 + 我有太多表和太多属性。我无法探索此选项。
  • @Ailyc 让我知道这是否对您有帮助。
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
相关资源
最近更新 更多