将Google BigQuery中的表与UNION ALL合并

问题描述 投票:0回答:2

我想在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
2个回答
2
投票

列必须相同,所以像这样:

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`

0
投票

对于联合,所有表格的所有列数及其数据必须相同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 
© www.soinside.com 2019 - 2024. All rights reserved.