MATCH_RECOGNIZE
SQL标准中定义的行模式识别子句,允许用类似正则表达式的语法对数据表中连续行序列进行模式匹配,核心子句包括PARTITION BY、ORDER BY、DEFINE、PATTERN和MEASURES
时间轴 (近 90 天)
MATCH_RECOGNIZE 是 SQL 标准中定义的行模式识别子句,用于像正则表达式一样匹配数据表中连续的行
MATCH_RECOGNIZE 中 PARTITION BY 决定分组维度,ORDER BY 定义行的排列顺序
MATCH_RECOGNIZE 中 DEFINE 子句用于给行的状态命名并定义判定条件,PATTERN 子句用类似正则的语法描述状态变量的出现顺序
PATTERN 支持的量词与正则基本对齐,包括 *(零次或多次)、+(一次或多次)、?(零次或一次),以及 {n}、{n,m} 等精确次数控制
MEASURES 子句负责从匹配到的行序列中提取信息,ONE ROW PER MATCH 每个匹配返回一行汇总,ALL ROWS PER MATCH 返回匹配区间内每一行明细
MEASURES 中可使用 CLASSIFIER() 函数获取每一行被归入的模式变量名称,MATCH_NUMBER() 函数为同一分区内的多个匹配编号,FIRST() 和 LAST() 分别取模式变量首次和末次匹配行的字段值
MATCH_RECOGNIZE 于 2016 年被纳入 SQL:2016 标准(ISO/IEC 9075-2:2016)
Oracle Database 12c Release 2 是最早落地实现 MATCH_RECOGNIZE 的主流数据库
Snowflake 在 2021 年前后跟进支持 MATCH_RECOGNIZE
Apache Flink 中的 MATCH_RECOGNIZE 实现与批处理数据库存在差异,例如对无界流的处理机制和超时语义的定义不同
还有 3 条时间轴事件
全部知识事实 (13)
MATCH_RECOGNIZE 是 SQL 标准中定义的行模式识别子句,用于像正则表达式一样匹配数据表中连续的行
50%待验证MATCH_RECOGNIZE 中 PARTITION BY 决定分组维度,ORDER BY 定义行的排列顺序
50%待验证MATCH_RECOGNIZE 中 DEFINE 子句用于给行的状态命名并定义判定条件,PATTERN 子句用类似正则的语法描述状态变量的出现顺序
50%待验证PATTERN 支持的量词与正则基本对齐,包括 *(零次或多次)、+(一次或多次)、?(零次或一次),以及 {n}、{n,m} 等精确次数控制
50%待验证MEASURES 子句负责从匹配到的行序列中提取信息,ONE ROW PER MATCH 每个匹配返回一行汇总,ALL ROWS PER MATCH 返回匹配区间内每一行明细
50%待验证MEASURES 中可使用 CLASSIFIER() 函数获取每一行被归入的模式变量名称,MATCH_NUMBER() 函数为同一分区内的多个匹配编号,FIRST() 和 LAST() 分别取模式变量首次和末次匹配行的字段值
50%待验证MATCH_RECOGNIZE 于 2016 年被纳入 SQL:2016 标准(ISO/IEC 9075-2:2016)
50%待验证Oracle Database 12c Release 2 是最早落地实现 MATCH_RECOGNIZE 的主流数据库
50%待验证Snowflake 在 2021 年前后跟进支持 MATCH_RECOGNIZE
50%待验证Apache Flink 中的 MATCH_RECOGNIZE 实现与批处理数据库存在差异,例如对无界流的处理机制和超时语义的定义不同
50%待验证PATTERN (FAIL+ SUCCESS) 表示一次或多次失败后跟一次成功,可用于检测暴力破解得手的登录行为序列
50%待验证MATCH_RECOGNIZE 适用于涉及事件顺序的分析场景,包括金融风控、用户行为分析、IoT监控、股价技术形态识别等
50%待验证对于不支持 MATCH_RECOGNIZE 的 PostgreSQL,社区中存在基于递归 CTE 或窗口函数的变通方案,但代码复杂度会显著上升且性能表现不一
50%