【问题标题】:How to auto detect schema from file in GCS and load to BigQuery?如何从 GCS 中的文件中自动检测架构并加载到 BigQuery?
【发布时间】:2020-04-17 09:39:01
【问题描述】:

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

例如,在我的例子中,有一列说XX 中的值大部分是Integer 类型,但也有一些值是String 类型,所以bq load 将由于架构不匹配而失败,在这种情况下,我们需要将数据类型更改为STRING

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

  • 尝试将文件从 GCS 加载到 BigQuery,如果表在BQ 中创建成功且没有任何数据不匹配,则无需执行任何操作。
  • 否则我需要能够动态更新架构并完成表创建。

【问题讨论】:

    标签: google-bigquery airflow


    【解决方案1】:

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

    BigQuery 原生支持以下架构修改:

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

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

    作为一种解决方法,我建议:

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

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

    【讨论】:

    • 这是一个很好的解决方法,但关于第二点,我如何使用文件中我选择的一行?
    • 我的建议是采用第一行并将其对齐,就像我在回答中所做的一样。 P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多