google-bigquery - 使用 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 文件模式进行更改
解决方案
我确实使用 AVRO 和 ORC 文件测试了您在我的数据上提供的 bq load 命令。
--replace or replace=true
flag 预计会擦除所有数据,并且正在这样做。
因此,实际上正在发生的事情是,所有表和模式都被删除并替换为文件中的新表。如果要将数据附加到表中,则需要使用
--noreplace or --replace=false
此标志仅当您的 ORC 文件架构与表中已存在的相同时才能正常工作。如果您的数据模式与表中定义的不同,则需要使用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>
推荐阅读
- c# - 如何从 XML 文件中提取嵌入的 PDF?
- python-3.x - 使用 spacy 的 POS 模式挖掘
- css - 将 3 个不相等的块左、中、右对齐
- java - 为什么它显示 Total tests run: 0, Failures: 0, Skips: 0 在终端上测试我的 testng.xml 之后,而不是在 Eclipse 上?
- mysql - Azure Application Insights Kusto 语言按时间生成值汇总
- javascript - 是否可以使用 JavaScript 悬停元素?
- google-maps - 在组件内部但在特定元素内部初始化 Google 地图
- typescript - 如何在打字稿中模拟框架对象上的击键?(不要使用 sendKeys 方法它不起作用)
- javascript - 使用js的高级表格过滤器
- javascript - Uncaught (in promise) TypeError: Cannot read property '0' of null / on tensorflowjs prediction