基于字段位置而非名称的 BigQuery 联合架构
Posted
技术标签:
【中文标题】基于字段位置而非名称的 BigQuery 联合架构【英文标题】:BigQuery union schema based on field location and not name 【发布时间】:2019-05-15 07:35:52 【问题描述】:有没有办法运行 BigQuery 联合查询并使架构取决于字段名称而不是字段位置。以下查询的结果并不直观,因为字段在基础表中的顺序不同,所以它们被转置了。
with table1 as (
select
'1' as field_1,
'2' as field_2
),
table2 as (
select
'2' as field_2,
'1' as field_1
)
select * from table1
union all
select * from table2
查询结果
【问题讨论】:
【参考方案1】:无论表是如何定义的,您都可以按名称以适当的顺序选择列:
SELECT
field_1,
field_2
FROM table1
UNION ALL
SELECT
field_1,
field_2
FROM table2
不过,最好只对基础表中的列重新排序:
CREATE OR REPLACE table2 AS
SELECT
field_1,
field_2
FROM table2
那么你有一个一致的列顺序。
【讨论】:
这里的表格只是示例。我想使用“select *”进行联合,而真正的底层表有一个巨大的嵌套模式,所以重新排序它们是一件很痛苦的事情。为什么联合基于列位置而不是列名? 这就是联合在所有主要查询引擎中的工作方式,而不仅仅是 BigQuery。根据 SQL 标准,列按位置关联。以上是关于基于字段位置而非名称的 BigQuery 联合架构的主要内容,如果未能解决你的问题,请参考以下文章
Bigquery - 在 CSV(联合表)中处理双引号和管道字段分隔符