【发布时间】:2021-07-30 03:45:40
【问题描述】:
考虑一下我的数据集 my_dataset 中的以下 BigQuery 表架构:
- Table_0001:名称(字符串); NUMBER(字符串)
- Table_0002:名称(字符串); NUMBER(字符串)
- Table_0003:名称(字符串); NUMBER(字符串)
- ...
- Table_0865:名称(字符串);代码(字符串)
- Table_0866:名称(字符串);代码(字符串)
- ...
我现在想使用以下方法合并所有表:
select * from `my_dataset.*`
但是,这不会产生第二组表的 CODE 列。据我了解,将采用数据集中第一个表的架构。
所以结果是这样的:
| NAME | NUMBER |
__________________
| John | 123456 |
| Mary | 123478 |
| ... | ...... |
| Abdul | null |
| Ariel | null |
我尝试点击INFORMATION_SCHEMA,分别选择两组表,然后合并:
with t_code as (
select
table_name,
from my_dataset.INFORMATION_SCHEMA.COLUMNS
where column_name = 'CODE'
),
select t.NAME, t.CODE as NUMBER from `my_dataset.*` as t
where _TABLE_SUFFIX in (select * from t_code)
但是,脚本仍然会在 my_dataset 的第一个表中查找其架构并返回:Error Running Query: Name CODE not found inside t。
所以现在我很茫然:我怎样才能将我的所有表联合起来而不必一个一个联合它们?即。如何在第二组表中选择 CODE 作为 NUMBER。
注意:虽然看起来 the question was asked over here,但接受的答案似乎并没有真正回答问题(就我而言)。
【问题讨论】:
-
所以你有两个不同的模式 - 你知道哪个范围属于哪个模式吗?例如:Table_0001 到 Table_0864 有一个架构,而 Table_0865 及以上有另一个架构?还是未知?
-
实际范围没有像我的示例中那样清楚地注明。表的名称实际上在集合中有所不同。我简化了这个 OP 的例子。
-
唯一的方法是动态地构建所有表的联合并使用 EXECUTE IMMEDIATE 执行它。应该很简单 - 但如果你看到这会让你满意并且你仍然需要帮助 - 请告诉我
-
如果我使用立即执行,它不能保存为视图对吗?我必须运行一个查询并将结果存储在一个表中以供进一步使用?
-
正确。您将无法将其保存为视图。但您可以将其保存为表格
标签: google-bigquery union wildcard