首页 > 解决方案 > 使用 BQ 加载加载 ORC 文件时保留 BQ 表架构

问题描述

在使用“bq Load”命令将 ORC 文件加载到现有 BQ 表时,我观察到一旦加载数据,表架构(表的列名)也会发生变化。

要求是将 ORC 文件从 GCS 加载到 BigQuery 中的临时表。这一步我试图使用“bq load”命令来实现,但它改变了表的现有模式。

示例代码:

bq load --replace --source_format=ORC some_dateset.some_table_staging gs://some_bucket/some_table/*

即使在将 ORC 文件加载到表中之后,我也希望保留 BigQuery 表中的实际列名。但截至目前,表的列名已根据 ORC 文件模式进行更改

标签: google-bigquery

解决方案


我确实使用 AVRO 和 ORC 文件测试了您在我的数据上提供的 bq load 命令。

  1. --replace or replace=true
    flag 预计会擦除所有数据,并且正在这样做
    因此,实际上正在发生的事情是,所有表和模式都被删除并替换为文件中的新表。

  2. 如果要将数据附加到表中,则需要使用
    --noreplace or --replace=false
    此标志仅当您的 ORC 文件架构与表中已存在的相同时才能正常工作。

  3. 如果您的数据模式与表中定义的不同,则需要使用schema_update_option
    --schema_update_option=ALLOW_FIELD_ADDITION

所以最后在你的用户案例中你只需要使用:

bq load --schema_update_option=ALLOW_FIELD_ADDITION --source_format=ORC <project_id>:<schema>.<table> gs://<bucket_name>/<file_name>


推荐阅读