ASOF JOIN 语法:限制关键字的使用

注意

此行为变更包含在 2024_01 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

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;
Copy

如果创建的对象具有双引号,请使用双引号解决问题:

SELECT * FROM "asof";
WITH "match_condition" AS (SELECT * FROM T1)
  SELECT * FROM "match_condition";
Copy

如果您创建的对象没有双引号,请使用双引号和大写字母解决问题:

SELECT * FROM "ASOF";
WITH "MATCH_CONDITION" AS (SELECT * FROM T1)
  SELECT * FROM "MATCH_CONDITION";
Copy

备注

Snowflake 建议您停止在应用程序中使用这些对象名称。

名称别名

如果 SELECT 语句使用 ASOF 或 MATCH_CONDITION 作为别名,则必须在别名之前使用 AS 或使用双引号将别名括起来。例如,以下语句不再受允许,并会返回错误:

SELECT * FROM t1 asof;
SELECT * FROM t2 match_condition;
Copy

通过以下方法之一修复问题:

SELECT * FROM t1 AS asof;
SELECT * FROM t1 "asof";
SELECT * FROM t2 AS match_condition;
SELECT * FROM t2 "match_condition";
Copy

变量名称

如果您正在使用会话变量或绑定名称为 ASOF 或 MATCH_CONDITION 的变量,并且其名称在创建时没有使用双引号,则必须重命移除它们。

例如,您不能再设置名称为 asof 的会话变量:

set asof ='2024/01/15';
Copy
001003 (42000): SQL compilation error:
syntax error line 1 at position 4 unexpected 'asof'.

但是,您可以设置使用显式双引号并命名为 "asof""ASOF" 的变量:

set "asof" ='2024/01/15';
Copy
+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+

同样的规则也适用于绑定变量,例如 :asof:match_condition

参考:1138

语言: 中文