BigQuery 加载镶木地板错误 - Parquet 中的字段 INT32 与架构中的 double 类型不兼容

Posted

技术标签:

【中文标题】BigQuery 加载镶木地板错误 - Parquet 中的字段 INT32 与架构中的 double 类型不兼容【英文标题】:BigQuery load parquet error - incompatible types for field INT32 in Parquet vs. double in schema 【发布时间】:2019-01-16 07:39:09 【问题描述】:

我正在尝试将 parquet 文件列表加载到 BigQuery 表中,但出现错误:

bq --location=EU load --source_format=PARQUET project:Input.k_2017_11_new "gs://my_bucket/2017_11/11/*.parquet"

等待 bqjob_r557b5eb5986df8a0_0000016855915d09_1 ... (34s) 当前状态:完成

加载操作中的 BigQuery 错误:错误处理作业 “项目:bqjob_r557b5eb5986df8a0_0000016855915d09_1”:出错时 读取数据,错误消息:字段类型不兼容 'data.list.element.p':Parquet 中的 INT32 与架构中的双精度

我实际上不需要导致错误的字段,但找不到跳过此列的方法。

这个问题有解决办法吗?

我尝试使用 json 文件指定架构,并强制此字段为 FLOAT、或 INT64、STRING,但到目前为止没有任何效果。

【问题讨论】:

【参考方案1】:

我看到您正在使用 cloudShell 从 parquet 加载到 BigQuery。尝试以 JSON 格式编写模式文件,将其复制或上传到您的 cloudShell 实例中,并在您提供 SOURCE-TO-PATH 参数后调用该文件:

bq --location=EU load --source_format=PARQUET project:Input.k_2017_11_new "gs://my_bucket/2017_11/11/*.parquet" ./mySchema.json

【讨论】:

【参考方案2】:

我在使用 python 时遇到了类似的问题,在尝试写入 bq 时创建了一个额外的列。

LoadJobConfig "ignore Unknown Values" 参数解决了我的问题,并且可以在 command-line 中作为 --ignore_unknown_values 传递

【讨论】:

以上是关于BigQuery 加载镶木地板错误 - Parquet 中的字段 INT32 与架构中的 double 类型不兼容的主要内容,如果未能解决你的问题,请参考以下文章

如何将带小数字段的镶木地板文件加载到BigQuery中?

从 Spark 写入镶木地板时如何处理空值

将镶木地板文件加载到红移时如何格式化时间戳字段?

Azure Synapse 无服务器 - Azure Synapse 无服务器池中的流加载镶木地板意外结束

pyspark:数据帧写入镶木地板

雪花镶木地板加载模式生成