Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
CAN CSA ISO/IEC TR 19075-5-18 是加拿大标准协会(CSA)采纳的国际技术报告,与 ISO/IEC TR 19075-5:2018 完全等同。该标准属于 ISO/IEC TR 19075 系列,专门针对 SQL 语言中“行模式识别(Row Pattern Recognition)”这一高级扩展功能进行技术描述与解释。截至 2026 年,该标准仍为行业通行的权威参考资料,为数据库厂商和用户实现一致的行模式匹配能力提供指导。
行模式识别允许用户在有序的查询结果集中检测预定义的序列模式,类似于正则表达式操作字符串,但作用于关系表的行序列。该标准详细说明了 MATCH_RECOGNIZE 子句的语法、语义、约束条件及其与现有 SQL 标准(ISO/IEC 9075)的集成方式。适用于需要分析事件流、金融时序、日志记录、传感器数据等应用场景,为复杂序列查询提供了一种声明式、标准的解决方案。
MATCH_RECOGNIZE 是核心语法单元,通常出现在 FROM 子句中,对输入表进行模式匹配处理。其基本结构包含模式定义(PATTERN)、变量条件(DEFINE)、度量列(MEASURES)、分区(PARTITION BY)和排序(ORDER BY)等子句。匹配结果可提供每次匹配的单行汇总(ONE ROW PER MATCH)或匹配涉及的每行详细记录(ALL ROWS PER MATCH)。
模式通过 PATTERN 子句定义,使用特定符号(如 +、*、|)组合行变量,形成正则表达式。每个行变量在 DEFINE 子句中独立绑定布尔条件,用于标识该变量所匹配的行应满足的谓词。标准强调了“行变量”的不可重叠性以及变量之间的可选择关系。
| 子句/参数 | 语法示例 | 功能说明 |
|---|---|---|
| PATTERN | PATTERN (A B+ C) | 定义行模式(正则表达式) |
| DEFINE | DEFINE A AS A.col > 0, B AS B.col > A.col | 定义每个行变量的匹配条件 |
| MEASURES | MEASURES FIRST(A.col) AS start_val, LAST(C.col) AS end_val | 指定输出度量列及其聚合 |
| ONE ROW PER MATCH | — | 每次匹配仅输出一行 |
| ALL ROWS PER MATCH | — | 输出匹配涉及的所有行(含分类) |
| PARTITION BY | PARTITION BY stock_id | 按列分区,匹配独立进行 |
| ORDER BY | ORDER BY timestamp | 指定行序(必须为确定性排序) |
标准定义了两种输出模式:单行模式(ONE ROW PER MATCH)为每次匹配返回一行聚合结果;全行模式(ALL ROWS PER MATCH)则返回匹配中包含的每一原始行,并附加 MATCH_NUMBER() 和 CLASSIFIER() 函数标识所属匹配编号和行变量类别。此外,还支持“空匹配”处理(无匹配时的默认行为)以及“粘性”(sticky)与“非粘性”的区间定义。
ORDER BY 未唯一确定顺序,可能导致多次查询结果不一致。标准要求排序键必须明确语义以保持可重复性。MATCH_RECOGNIZE 是 SQL:2016 标准引入的扩展,该技术报告对其进行了细化。使用时应确认数据库产品是否完全实现该语法及所有可选特性(如间隔模式、分区内匹配等)。常见实现中,Oracle Database 在 12c 中率先支持,PostgreSQL(通过 pg_sql 扩展或 14+ 原生)、IBM Db2 等亦有不同程度支持。
行模式匹配基于有穷自动机在分区排序流上执行,因此性能受分区数量、模式复杂度、匹配数量及行变量定义中的谓词复杂性影响。建议:
PARTITION BY 减少单分区的数据量。DEFINE 中使用代价高昂的并列子查询。ALL ROWS PER MATCH 与 CLASSIFIER() 配合窗口函数实现更灵活的后续分析。函数可用于金融交易序列中的“双顶”、“三重底”识别;物联网数据中的异常事件链检测;Web 日志中的访问模式分析(如点击流漏斗);游戏玩家行为序列等。
CAN CSA ISO/IEC TR 19075-5-18 是 ISO/IEC TR 19075 系列的一部分,该系列多名称为“ISO/IEC 9075 —— SQL 标准的技术解释”。其中:
该标准直接引用 ISO/IEC 9075(SQL 核心标准),特别是 SQL 中的窗口函数、分组集合、排序机制等。实现者需同时遵守 SQL:2016 及后续版本中 MATCH_RECOGNIZE 的相关条款。
加拿大标准协会(CSA)作为国家体采纳了该技术报告,使其成为加拿大产业界和政府的推荐准则。其他类似国家采纳标准包括 ANSI(美国)和 BSI(英国)等同采用版本,各版本内容完全一致。
© 2026 加拿大标准协会(CSA Group)与 国际标准化组织(ISO)/ 国际电工委员会(IEC)。本文仅为技术解读,不构成官方标准文本。