我正在尝试将文件从GCS加载到BigQuery,其架构是从GCS中的文件自动生成的。我正在使用Apache Airflow来做同样的事情,我遇到的问题是,当我使用文件中的自动检测模式时,BigQuery会根据一些~100个初始值创建模式。
例如,在我的例子中,有一列说X
,X
中的值大多是Integer
类型,但也有一些值是String
类型,所以bq load
会因架构不匹配而失败,在这种情况下我们需要将数据类型更改为STRING
。
所以我可以做的是通过自己生成架构来手动创建一个新表。或者我可以将max_bad_record
值设置为某些50
,但这似乎不是一个好的解决方案。理想的解决方案是这样的:
- 尝试将文件从GCS加载到BigQuery,如果表是在
BQ
中成功创建的,没有任何数据不匹配,那么我不需要做任何事情。 - 否则,我需要能够动态更新架构并完成表创建。
由于您无法在 bq 中更改列类型(请参阅此链接(
BigQuery 原生支持以下架构修改:
BigQuery 本机支持以下架构修改:
* 向架构定义
添加列* 将列的模式从"必需"放宽到"可为空"不支持所有其他架构修改,需要手动解决方法
因此,作为解决方法,我建议:
- 在脚本中使用
--max_rows_per_request = 1
- 使用最适合您的情况的 1 行,并具有优化的字段类型。
这将创建具有正确架构和 1 行的表,您可以从那里加载其余数据。