【发布时间】:2021-04-11 17:50:37
【问题描述】:
我有一堆数据存储在 Google Cloud Storage 的分区 ORC 文件中。我的存储桶如下所示:
my_bucket
- folder_of_orc_files
- - partition1=abc
- - - file1.orc
- - - file2.orc
我在 BigQuery 中定义了一个外部表,它指向上面创建的数据,如下所示:
CREATE OR REPLACE EXTERNAL TABLE my_dataset.my_external_table
WITH PARTITION COLUMNS (
partition1 STRING,
)
OPTIONS (
uris=['gs://my_bucket/folder_of_orc_files/*'],
format=orc,
hive_partition_uri_prefix='gs://my_bucket/folder_of_orc_files'
);
这些文件目前有“A 列”、“B 列”和“C 列”列。
现在我需要添加“D 列”。所以我添加了一个包含“D列”的file3.orc。当然,在现实中,我有大量文件,我宁愿不必重新创建所有旧文件。我需要一种方法让外部表看到旧条目为 NULLS 的“D 列”以及新文件中的正确值。
在门外,外部表没有看到“D列”。所以我删除了表格并重新添加了它。它仍然只有 A、B 和 C 列,完全忽略了“D 列”。使用 ORC 文件,您无法指定架构 - 它会自动读取它。 ALTER TABLE 命令不适用于外部表。
我发现的唯一一件事(没有从我的 Spark 作业从头开始重新加载所有数据)是我可以将所有数据移入临时表,然后将它们重新写出——这又是一个相当大的问题当您拥有大量数据时,任务繁重(而且成本高昂)。任何人都知道任何其他方式来实现这一目标?谢谢!
【问题讨论】:
标签: google-bigquery google-cloud-storage