如何自动从GCS中的文件中检测架构并将其加载到BigQuery?

时间:2019-12-27 11:49:45

标签: google-bigquery airflow

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

例如,在我的情况下,有一个列XX中的值大部分为Integer类型,但有些值为{{1} }类型,因此String会因架构不匹配而失败,在这种情况下,我们需要将数据类型更改为bq load

所以我能做的是通过自己生成模式来手动创建新表。或者我可以将STRING的值设置为某个max_bad_record,但这似乎不是一个好的解决方案。理想的解决方案是这样的:

  • 尝试将文件从GCS加载到BigQuery,如果该表是在50中成功创建的,并且没有任何数据不匹配,那么我就不需要做任何事情。
  • 否则,我需要能够动态更新架构并完成表的创建。

1 个答案:

答案 0 :(得分:1)

由于您无法更改bq中的列类型(请参见此link

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

  

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

     

不支持所有其他架构修改,并且需要手动解决方法

因此,我建议:

  • 在脚本中使用--max_rows_per_request = 1
  • 使用1行,这是最适合您的情况且具有优化字段类型的行。

这将创建具有正确架构和1行的表,然后您可以从中加载其余数据。