BigQuery cli bq 如何使用 EXECUTE IMMEDIATE 脚本

BigQuery cli bq how to use EXECUTE IMMEDIATE script

我想使用两个 SQL 脚本通过 bq query 命令在 BigQuery 中创建和更新 table。 这是两个脚本:

1- 创建 table

EXECUTE IMMEDIATE 
    '''CREATE TABLE IF NOT EXISTS dataset.newtable (
        id STRING, ''' ||
        (SELECT STRING_AGG(
                segment || 
                " INT64 " ORDER BY segment
        ) FROM (
            SELECT DISTINCT segment FROM dataset.source
        )
    ) || 
    ''')''';

2- 更新 table

EXECUTE IMMEDIATE 
    '''INSERT dataset.newtable (
        SELECT id, ''' ||
        ( SELECT STRING_AGG("COUNTIF(
            segment = '" ||
            segment ||
        "') AS " ||
        segment ORDER BY segment
    ) FROM (
        SELECT DISTINCT segment FROM dataset.source
    ) ) || 
    ''' FROM dataset.source GROUP BY 1 ORDER BY 1
)''';

当使用这两个脚本作为 bq query 命令的查询时,出现错误:

Syntax error: Expected keyword IMMEDIATE but got to end of the script at [1:8]

还有其他方法吗?

谢谢

bq 命令行工具中的默认查询方言是旧版 SQL。您需要切换到标准 SQL 方言才能使用 运行 脚本:

  1. --use_legacy_sql=false--nouse_legacy_sql 标记到您的命令行语句。
  2. 在你的 sql 前加上 #standardSQL

您也可以将标准 SQL 设置为默认值。参见 here