asof 连接
SmartESQL 支持 asof 连接,这种连接通常用于日期/时间列,以选择指定日期或时间范围内的表行。关键字 asof 可用于内连接(仅返回匹配的行)和外连接(在未找到匹配项时为内部表列返回空值)。其语法如下:
outer_table o ASOF [OUTER] JOIN inner_table i
ON (o.k1 = i.k1 AND o.k2 = i.k2 AND ... o.kN >= i.kN)
AS OF 连接需要 ON 子句。ON 预测必须由一个或多个连接表列的相等比较的合取项以及恰好一个大于等于或小于等于比较组成。相等比较指定了一个常规(严格)连接条件,与常规连接相同。
单个范围比较实际上执行的是 asof 连接,其中外部表的值对应于内部表列值的区间。
例如,如果外部表包含具有以下值的时间戳 ts:
10:01,
10:03,
10:07,
10:08
并且内部表格包含时间戳:
10:02, 10:04, 10:06, 10:08
那么带有谓词 outer.ts >= inner.ts 的 asof 连接将建立以下映射:
10:01 -> null
10:03 -> 10:02
10:07 -> 10:06
10:08 -> 10:08
asof连接使用合并连接实现;即两个表都排序,然后合并。如果存在合适的索引,则使用索引扫描而不是显式排序。
注意,连接条件>=要求升序排序,而<=条件要求降序排序。
asof连接使用的示例可以在samples/xsql/scripts/asof_join.sql中找到