【问题标题】:Merging tables in Google BigQuery with UNION ALL将 Google BigQuery 中的表与 UNION ALL 合并
【发布时间】:2019-07-28 17:59:22
【问题描述】:

我想在 BQ 中做这样的事情。这些表具有不同的模式。任何想法如何实现这一目标?

SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID, Withdrawal_this_hour FROM `tb1`
UNION ALL
SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID, Refill_this_hour FROM `tb2` 
UNION ALL
SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID, changes_this_hour, net_amount, date from `tb3`

提前谢谢..

【问题讨论】:

标签: sql google-bigquery


【解决方案1】:

列必须相同,所以是这样的:

SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID,
       Withdrawal_this_hour, NULL as Refill_this_hour,
       NULL as changes_this_hour, NULL as net_amount, NULL as date 
FROM `tb1`
UNION ALL
SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID,
       NULL, Refill_this_hour, NULL, NULL, NULL
FROM `tb2` 
UNION ALL
SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID,
       NULL, NULL, changes_this_hour, net_amount, date 
FROM `tb3`

【讨论】:

    【解决方案2】:

    对于联合所有列数及其数据对于所有表big query docs 必须相同,您可以使用 cte 尝试如下所示

      with cte as  (
    
       SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID,
       Withdrawal_this_hour, NULL as Refill_this_hour,
       NULL as changes_this_hour, NULL as net_amount, NULL as date
      UNION ALL
      SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID,
       NULL, Refill_this_hour, NULL, NULL, NULL FROM tb2
       UNION ALL
      SELECT YYYYMMDDHH, CONTAINER, Parent_Container, PROTOTYPE_ID,
       NULL, NULL, changes_this_hour, net_amount, date 
      FROM tb3
     ) select * from cte 
    

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多