簡體   English   中英

BigQuery:Select 列如果存在,否則輸入 NULL?

[英]BigQuery: Select column if it exists, else put NULL?

我正在更新每日儀表板。 假設我每天都有兩個表TODAYBEFORE_TODAY 我每天都在做的事情是這樣的:

SELECT a, b FROM TODAY
UNION ALL
SELECT a,b FROM BEFORE_TODAY;

TODAY表每天生成並附加到它之前的所有數據。 現在,我需要生成一個新列,比如c並且為了 UNION ALL 這兩個,我需要它在BEFORE_TODAY也可用。

如何向BEFORE_TODAY添加條件語句以檢查我是否有c列並使用該列,否則使用NULL代替它。

您的數據 model 有問題。您應該將數據放入同一個表的不同分區中。 那么你就沒有問題了。 您可以只查詢主表以獲得所需的分區。 該列將出現在歷史記錄中,其值為NULL

這是正確的解決方案。 您可以創建一個被黑的解決方案,假設您的表有一個主鍵。 例如,如果a, b在每一行上都是唯一的,你可以這樣做:

select t.a, t.b, t.c
from today t
union all
select b.a, b.b,
       (select c  -- not qualified on purpose
        from before_today b2
        where b2.a = b.a and b2.b = b.b
       ) as 
from before_today b cross join
     (select null as c) c;

如果b.c不存在,則子查詢返回c.c 如果它確實存在,它會從子查詢中返回b2.c

雖然通過結合動態 SQL 和 INFORMATION_SCHEMA,您可以編寫一個腳本來實現您所說的,但這似乎不是正確的做法。

作為數據 model 規划的一部分,您應該提前將列 c 添加到BEFORE_TODAY 現有行上新添加的列將始終具有 NULL 值。 然后您可以將列添加到TODAY並照常引用列 c。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM