Google bigquery 如何从GCS中的文件自动检测模式并加载到BigQuery?

Google bigquery 如何从GCS中的文件自动检测模式并加载到BigQuery?,google-bigquery,airflow,Google Bigquery,Airflow,我正在尝试将一个文件从GCS加载到BigQuery,它的模式是从GCS中的文件自动生成的。我使用ApacheAirflow做同样的事情,我遇到的问题是,当我从文件中使用自动检测模式时,BigQuery会基于大约100个初始值创建模式 例如,在我的例子中,有一个列,比如X,X中的值大部分是整数类型,但也有一些值是字符串类型,因此bq加载将因模式不匹配而失败,在这种情况下,我们需要将数据类型更改为字符串 所以我能做的就是通过自己生成模式手动创建一个新表。或者我可以将max_bad_记录值设置为50左

我正在尝试将一个文件从GCS加载到BigQuery,它的模式是从GCS中的文件自动生成的。我使用ApacheAirflow做同样的事情,我遇到的问题是,当我从文件中使用自动检测模式时,BigQuery会基于大约100个初始值创建模式

例如,在我的例子中,有一个列,比如X,X中的值大部分是整数类型,但也有一些值是字符串类型,因此bq加载将因模式不匹配而失败,在这种情况下,我们需要将数据类型更改为字符串

所以我能做的就是通过自己生成模式手动创建一个新表。或者我可以将max_bad_记录值设置为50左右,但这似乎不是一个好的解决方案。理想的解决方案如下:

尝试将文件从GCS加载到BigQuery,如果表是在BQ中成功创建的,没有任何数据不匹配,那么我不需要做任何事情。 否则,我需要能够动态更新模式并完成表的创建。
由于您无法更改bq中的列类型,请参见

BigQuery本机支持以下架构修改:

BigQuery本机支持以下架构修改: *向架构定义添加列 *将列的模式从REQUIRED放宽为NULLABLE

所有其他模式修改都不受支持,需要手动解决

因此,作为解决办法,我建议:

在脚本中使用-max_rows_per_request=1 使用1行,这是最适合您的情况与优化的字段类型。
这将创建具有正确架构和1行的表,从中可以加载其余数据。

这是一个很好的解决方法,但关于第二点,我如何使用我从文件中选择的一行?我的建议是使用第1行,并将其与我在回答中所做的一样对齐。P