簡體   English   中英

SELECT 如果表存在於 WITH 子句中 (BigQuery)

[英]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.

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