GoogleSQL(BigQuery)调用宏定义表报$非法错误的解决方法咨询
问题原因
- 宏定义顺序错误:BigQuery执行SQL是从上到下解析,你把
DEFINE MACRO语句写在了调用语句的后面,调用时宏还未被声明,会导致符号解析异常。 - 宏定义&调用语法错误:GoogleSQL(BigQuery)的宏规则不支持直接使用
$宏名的调用格式,无参数的宏定义时需要补充空参数括号,调用时需要用${宏名()}的格式引用,原写法里单独的$属于无法识别的非法字符。
修正后可运行代码
-- 先定义宏 DEFINE MACRO macro1() AS ( SELECT main.u_id, main.timestamp, main.type FROM table1 as main WHERE main.type = 'ISSUE' ); -- 再调用宏 SELECT a.*, k.timestamp FROM table1 as a LEFT JOIN ${macro1()} as k ON a.u_id = k.u_id
替代方案(更推荐)
你当前的场景逻辑非常简单,不需要额外定义宏,使用通用CTE写法可读性更高,也不会出现宏语法适配问题:
WITH macro1 AS ( SELECT main.u_id, main.timestamp, main.type FROM table1 as main WHERE main.type = 'ISSUE' ) SELECT a.*, k.timestamp FROM table1 as a LEFT JOIN macro1 as k ON a.u_id = k.u_id
内容的提问来源于stack exchange,提问作者Moose
相关产品推荐
相关产品推荐

