![](/img/trans.png)
[英]BigQuery use the where clause to filter on a column that not always exists in the table
[英]SELECT if table exists in WITH clause (BigQuery)
我正在創建一個表來保持連續登錄天數,這是login_[today]
和continuous_login_[previous_day]
組合的結果。 但是,如果[previous_day]
的表不存在,我想處理異常。
在參考文獻[1] 、 [2]和[3]的幫助下,只有當前一天的表像A
一樣存在時,我才能檢索值(連續登錄)。
但是,我無法像B
那樣在WITH
子句中使用IF EXISTS
語句的結果。 如何在WTIH
子句中使用IF EXISTS
的結果。 或者有沒有更好的方法來完成這項工作?
一種。
-- Retrieve only if the table exists
IF EXISTS (
SELECT *
FROM `my_project.my_dataset.__TABLES_SUMMARY__`
WHERE table_id = CONCAT('_my_table_', '20201010') -- daily log
)
THEN
(
SELECT
pid, MAX(continuous_login_days) AS continuous_login_days
FROM `my_project.my_dataset._my_table_*`
WHERE _TABLE_SUFFIX = '20201010'
GROUP BY pid
);
ELSE
SELECT NULL;
END IF
B.
-- GOAL
WITH
...
, continuous_logins_table AS (
[above statement]
)
SELECT
...
IFNULL(continuous_logins_table.continuous_login_days, 0) + 1 AS continuous_login_days,
FROM
...
LEFT JOIN continuous_logins_table
SELECT
pid, MAX(continuous_login_days) AS continuous_login_days
FROM `my_project.my_dataset._my_table_*`
WHERE _TABLE_SUFFIX = '20201010'
AND EXISTS(
SELECT 1
FROM `my_project.my_dataset.__TABLES_SUMMARY__`
WHERE table_id = CONCAT('_my_table_', '20201010')
)
GROUP BY pid
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.