google-bigquery - BigQuery 选择具有不同列名的多个表
问题描述
考虑我的数据集 my_dataset 中的以下 BigQuery 表架构:
- Table_0001:名称(字符串);数字(字符串)
- 表_0002:名称(字符串);数字(字符串)
- 表_0003:名称(字符串);数字(字符串)
- ...
- 表_0865:名称(字符串);代码(字符串)
- 表_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
。
所以现在我很茫然:我怎样才能联合我所有的表而不必一个一个地联合它们?IE。如何在第二组表中选择 CODE 作为 NUMBER。
注意:虽然问题似乎是在这里提出的,但接受的答案似乎并没有真正回应这个问题(就我而言)。
解决方案
我看到你可以做的技巧是首先通过运行收集所有代码
create table `my_another_dataset.codes` as
select * from `my_dataset.*` where not code is null
然后对任何一个带有number
列的表进行任何简单的虚假更新 - 这将使带有number
列的模式成为默认值。所以现在你可以收集所有数字
create table `my_another_dataset.numbers` as
select * from `my_dataset.*` where not number is null
最后你可以做简单的联合
select * from `my_another_dataset.numbers` union all
select * from `my_another_dataset.codes`
注意:另请参阅我在您问题下方的评论
推荐阅读
- python - 试图将 2 张图像相互重叠
- java - 将相机从 android 传输到 Wowza 时出现问题
- authentication - chrome 扩展的密码管理器自动完成功能
- javascript - 将媒体从文件系统存储和加载到电子应用程序
- java - 如何使用 TFlite 安卓工作室
- javascript - 为什么我的 JS 不读我的正确吗?
- mysql - 获取用户未加入的群组列表,用户未创建的群组列表
- javascript - TikTok在某些计算机上嵌入了返回403
- prestashop - Prestashop webvolty,无法更改默认模板,回到原始状态
- c# - 关闭和打开表单时如何写入未随数据库删除的数据?