ASOF JOIN 语法:限制关键字的使用¶
ASOF JOIN 功能的行为如下:
- 变更前:
ASOF 和 MATCH_CONDITION 作为对象名、对象别名、会话变量和绑定变量的使用不受限制。
- 变更后:
ASOF 和 MATCH_CONDITION 是新的关键字。这些关键字在 SELECT 命令和设置或使用会话或绑定变量的命令中的使用受到限制。
对象名称
如果 SELECT 语句使用 ASOF 或 MATCH_CONDITION 作为表、视图或内联视图的名称,则必须按以下方式标识:
如果创建对象的名称中包含双引号,请使用相同的双引号名称。
如果创建的对象名称中没有双引号,请使用双引号和大写字母。
例如,以下语句不再受允许,并会返回错误:
SELECT * FROM asof; WITH match_condition AS (SELECT * FROM T1) SELECT * FROM match_condition;
如果创建的对象具有双引号,请使用双引号解决问题:
SELECT * FROM "asof"; WITH "match_condition" AS (SELECT * FROM T1) SELECT * FROM "match_condition";
如果您创建的对象没有双引号,请使用双引号和大写字母解决问题:
SELECT * FROM "ASOF"; WITH "MATCH_CONDITION" AS (SELECT * FROM T1) SELECT * FROM "MATCH_CONDITION";
备注
Snowflake 建议您停止在应用程序中使用这些对象名称。
名称别名
如果 SELECT 语句使用 ASOF 或 MATCH_CONDITION 作为别名,则必须在别名之前使用 AS 或使用双引号将别名括起来。例如,以下语句不再受允许,并会返回错误:
SELECT * FROM t1 asof; SELECT * FROM t2 match_condition;
通过以下方法之一修复问题:
SELECT * FROM t1 AS asof; SELECT * FROM t1 "asof"; SELECT * FROM t2 AS match_condition; SELECT * FROM t2 "match_condition";
变量名称
如果您正在使用会话变量或绑定名称为 ASOF 或 MATCH_CONDITION 的变量,并且其名称在创建时没有使用双引号,则必须重命移除它们。
例如,您不能再设置名称为
asof
的会话变量:set asof ='2024/01/15';
001003 (42000): SQL compilation error: syntax error line 1 at position 4 unexpected 'asof'.
但是,您可以设置使用显式双引号并命名为
"asof"
或"ASOF"
的变量:set "asof" ='2024/01/15';
+----------------------------------+ | status | |----------------------------------| | Statement executed successfully. | +----------------------------------+
同样的规则也适用于绑定变量,例如
:asof
和:match_condition
。
参考:1138