【问题标题】:SELECT if table exists in WITH clause (BigQuery)如果表存在于 WITH 子句 (BigQuery) 中,则选择
【发布时间】:2020-10-26 06:34:22
【问题描述】:

我正在创建一个表来保持连续登录天数,这是login_[today]continuous_login_[previous_day] 组合的结果。但是,如果[previous_day] 的表不存在,我想处理异常。

在引用 [1][2][3] 的帮助下,只有当前一天的表存在时,我才能够检索值(连续登录),例如 A

但是,我无法在WITH 子句中使用IF EXISTS 语句的结果,例如B。如何在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

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:
    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
    

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      相关资源
      最近更新 更多