Bigquery多个WITH子句抛出错误

man*_*pig 5 google-bigquery

我正在使用 BigQuery 运行带有多个WITH 子句的查询,如下所示:

WITH subq_L1 AS (
    SELECT
        id,
        metric,
        COUNT(DISTINCT IF(DATEDIFF(TIMESTAMP('{execution_date:s}'), TIMESTAMP(ds)) < 1, ds, NULL)) AS L1
    FROM
        [xxx:yyy.zzz]
    GROUP EACH BY
        id, metric
),
subq_L7 AS (
    SELECT
        id,
        metric,
        COUNT(DISTINCT IF(DATEDIFF(TIMESTAMP('{execution_date:s}'), TIMESTAMP(ds)) < 7, ds, NULL)) AS L7
    FROM
        [xxx:yyy.zzz]
    GROUP EACH BY
        id, metric
),
subq_L14 AS (
    SELECT
        id,
        metric,
        COUNT(DISTINCT IF(DATEDIFF(TIMESTAMP('{execution_date:s}'), TIMESTAMP(ds)) < 14, ds, NULL)) AS L14
    FROM
        [xxx:yyy.zzz]
    GROUP EACH BY
        id, metric
)
SELECT * FROM subq_L1
UNION ALL
SELECT * FROM subq_L7
UNION ALL
SELECT * FROM subq_L14
Run Code Online (Sandbox Code Playgroud)

'{execution_date:s}' 由 python 格式化为日期字符串。

BigQuery 不断抛出此错误:

Encountered " "WITH" "WITH "" at line 1, column 1. Was expecting: <EOF>.
Run Code Online (Sandbox Code Playgroud)

如果它们是独立的,则所有查询都会成功运行;只有将它们放在WITH子句中才会使其不成功。

为什么这些都没有成功?

Mik*_*ant 4

WITH仅适用于标准 SQL - 请参阅如何启用标准 SQL

另外,在标准 SQL 中,您应该使用 `xxx.yyy.zzz` 而不是 [xxx:yyy.zzz]

注意
也可以在不更改代码的情况下强制执行标准 SQL。
只需确保查询的第一行是

#StandardSQL
Run Code Online (Sandbox Code Playgroud)

BigQuery 会将查询的其余部分视为标准 SQL