You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在BigQuery中如何正确使用CTE With子句语法?

语法调整解决方案

你遇到的Syntax error: Expected keyword AS but got "(" at [78:14]报错是BigQuery与SQL Server的语法差异导致的,以下是最常见的触发场景和对应修改方案:

  • 场景1:VALUES表构造器/派生表的列别名写法不兼容
    SQL Server支持在派生表或VALUES构造的临时表后直接加括号定义列名,无需显式声明AS,示例如下:
-- SQL Server 正常运行写法
SELECT * FROM (
  VALUES (1, '张三'), (2, '李四')
) t(user_id, user_name)

BigQuery不支持该写法,可调整为以下两种兼容写法:
方式1:使用UNNEST+STRUCT构造数据,内部显式指定列名

-- BigQuery 兼容写法
SELECT * FROM UNNEST([
  STRUCT(1 AS user_id, '张三' AS user_name),
  STRUCT(2 AS user_id, '李四' AS user_name)
])

方式2:派生表内部给列命名,外层仅加表别名

-- BigQuery 兼容写法
SELECT * FROM (
  SELECT 1 AS user_id, '张三' AS user_name
  UNION ALL
  SELECT 2 AS user_id, '李四' AS user_name
) AS t
  • 场景2:省略AS的别名写法识别错误
    SQL Server支持部分场景下省略AS声明别名,部分省略写法会被BigQuery误判,示例报错写法:
-- SQL Server可运行,BigQuery报错
SELECT user_id id, user_name name FROM user_table

调整方案为所有别名都显式加AS声明:

-- BigQuery 兼容写法
SELECT user_id AS id, user_name AS name FROM user_table
  • 场景3:函数调用的别名写法错误
    SQL Server支持部分自定义函数调用的特殊别名格式,BigQuery要求函数调用指定别名时必须在末尾加AS,示例报错写法:
SELECT (split_user_name(user_name)) name_list FROM user_table

调整方案:

SELECT split(user_name, ',') AS name_list FROM user_table

如果以上场景没有覆盖你的代码逻辑,可以贴出第78行前后的代码片段获取更针对性的调整方案。

内容的提问来源于stack exchange,提问作者Ardatnbr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:00:01