MATCH_RECOGNIZE ( [ PARTITION BY column [, ...] ] [ ORDER BY column [, ...] ] [ MEASURES measure_definition [, ...] ] [ ROWS PER MATCH ] [ AFTER MATCH skip_to ] PATTERN ( row_pattern ) [ SUBSET subset_definition [, ...] ] DEFINE variable_definition [, ...] )
说明:
更多详细功能介绍请参考:模式查询
以示例数据为源数据
将 table1 中的数据按照时间间隔小于等于 24 小时分段,查询每段中的数据总条数,以及开始、结束时间。
查询SQL
SELECT start_time, end_time, cnt FROM table1 MATCH_RECOGNIZE ( ORDER BY time MEASURES RPR_FIRST(A.time) AS start_time, RPR_LAST(time) AS end_time, COUNT() AS cnt PATTERN (A B*) DEFINE B AS (cast(B.time as INT64) - cast(PREV(B.time) as INT64)) <= 86400000 ) AS m
查询结果
+-----------------------------+-----------------------------+---+ | start_time| end_time|cnt| +-----------------------------+-----------------------------+---+ |2024-11-26T13:37:00.000+08:00|2024-11-26T13:38:00.000+08:00| 2| |2024-11-27T16:38:00.000+08:00|2024-11-30T14:30:00.000+08:00| 16| +-----------------------------+-----------------------------+---+ Total line number = 2
将 table2 中的数据按照 humidity 湿度值差值小于 0.1 分段,查询每段中的数据总条数,以及开始、结束时间。
SELECT start_time, end_time, cnt FROM table2 MATCH_RECOGNIZE ( ORDER BY time MEASURES RPR_FIRST(A.time) AS start_time, RPR_LAST(time) AS end_time, COUNT() AS cnt PATTERN (A B*) DEFINE B AS (B.humidity - PREV(B.humidity )) <=0.1 ) AS m;
+-----------------------------+-----------------------------+---+ | start_time| end_time|cnt| +-----------------------------+-----------------------------+---+ |2024-11-26T13:37:00.000+08:00|2024-11-27T00:00:00.000+08:00| 2| |2024-11-28T08:00:00.000+08:00|2024-11-29T00:00:00.000+08:00| 2| |2024-11-29T11:00:00.000+08:00|2024-11-30T00:00:00.000+08:00| 2| +-----------------------------+-----------------------------+---+ Total line number = 3
将 table1 中数据按照设备号分组,统计上海地区湿度大于 35 的开始、结束时间及最大湿度值。
SELECT m.device_id, m.match, m.event_start, m.event_end, m.max_humidity FROM table1 MATCH_RECOGNIZE ( PARTITION BY device_id ORDER BY time MEASURES MATCH_NUMBER() AS match, RPR_FIRST(A.time) AS event_start, RPR_LAST(A.time) AS event_end, MAX(A.humidity) AS max_humidity ONE ROW PER MATCH PATTERN (A+) DEFINE A AS A.region= '上海' AND A.humidity> 35 ) AS m
+---------+-----+-----------------------------+-----------------------------+------------+ |device_id|match| event_start| event_end|max_humidity| +---------+-----+-----------------------------+-----------------------------+------------+ | 100| 1|2024-11-28T09:00:00.000+08:00|2024-11-29T18:30:00.000+08:00| 45.1| | 101| 1|2024-11-30T09:30:00.000+08:00|2024-11-30T09:30:00.000+08:00| 35.2| +---------+-----+-----------------------------+-----------------------------+------------+ Total line number = 2