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 方言才能使用 运行 脚本:
--use_legacy_sql=false
或 --nouse_legacy_sql
标记到您的命令行语句。
- 在你的 sql 前加上
#standardSQL
您也可以将标准 SQL 设置为默认值。参见 here。
我想使用两个 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 方言才能使用 运行 脚本:
--use_legacy_sql=false
或--nouse_legacy_sql
标记到您的命令行语句。- 在你的 sql 前加上
#standardSQL
您也可以将标准 SQL 设置为默认值。参见 here。