【问题标题】:BigQuery union schema based on field location and not name基于字段位置而非名称的 BigQuery 联合架构
【发布时间】: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

查询结果

【问题讨论】:

    标签: google-bigquery


    【解决方案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 标准,列按位置关联。
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多