Flink sql 完成CEP操作地址

https://help.aliyun.com/document_detail/73845.html

示例

  • 示例语法
    SELECT *
    FROM Ticker MATCH_RECOGNIZE (
    PARTITION BY symbol
    ORDER BY tstamp
    MEASURES STRT.tstamp AS start_tstamp,
    LAST(DOWN.tstamp) AS bottom_tstamp,
    LAST(UP.tstamp) AS end_tstamp
    ONE ROW PER MATCH
    AFTER MATCH SKIP TO NEXT ROW
    PATTERN (STRT DOWN+ UP+) WITHIN INTERVAL '10' SECOND
    DEFINE
    DOWN AS DOWN.price < PREV(DOWN.price),
    UP AS UP.price > PREV(UP.price)
    );
  • 测试数据
     
    timestamp(TIMESTAMP) card_id(VARCHAR) location(VARCHAR) action(VARCHAR)
    2018-04-13 12:00:00 1 Beijing Consumption
    2018-04-13 12:05:00 1 Shanghai Consumption
    2018-04-13 12:10:00 1 Shenzhen Consumption
    2018-04-13 12:20:00 1 Beijing Consumption
  • 测试案例语法
    CREATE TABLE datahub_stream (
        `timestamp`               TIMESTAMP,
        card_id                   VARCHAR,
        location                  VARCHAR,
        `action`                  VARCHAR,
        WATERMARK wf FOR `timestamp` AS withOffset(`timestamp`, 1000)
    ) WITH (
        type = 'datahub'
        ...
    );
    CREATE TABLE rds_out (
        start_timestamp               TIMESTAMP,
        end_timestamp                 TIMESTAMP,
        card_id                       VARCHAR,
        event                         VARCHAR
    ) WITH (
        type= 'rds'
        ...
    );
    
    --案例描述:当相同的card_id在十分钟内,在两个不同的location发生刷卡现象,就会触发报警机制,以便监测信用卡盗刷等现象。
    
    --定义计算逻辑。
    insert into rds_out
    select 
    `start_timestamp`, 
    `end_timestamp`, 
    card_id, `event`
    from datahub_stream
    MATCH_RECOGNIZE (
        PARTITION BY card_id   --按card_id分区,将相同卡号的数据分到同一个计算节点上。
        ORDER BY `timestamp`   --在窗口内,对事件时间进行排序。
        MEASURES               --定义如何根据匹配成功的输入事件构造输出事件。
            e2.`action` as `event`,                
            e1.`timestamp` as `start_timestamp`,   --第一次的事件时间为start_timestamp。
            LAST(e2.`timestamp`) as `end_timestamp`--最新的事件时间为end_timestamp。
        ONE ROW PER MATCH           --匹配成功输出一条。
        AFTER MATCH SKIP TO NEXT ROW--匹配后跳转到下一行。
        PATTERN (e1 e2+) WITHIN INTERVAL '10' MINUTE  -- 定义两个事件,e1和e2。
        DEFINE                     --定义在PATTERN中出现的patternVariable的具体含义。
            e1 as e1.action = 'Consumption',    --事件一的action标记为Consumption。
            e2 as e2.action = 'Consumption' and e2.location <> e1.location --事件二的action标记为Consumption,且事件一和事件二的location不一致。
    );
  • 测试结果
     
    start_timestamp(TIMESTAMP) end_timestamp(TIMESTAMP) card_id(VARCHAR) event(VARCHAR)
    2018-04-13 12:00:00.0 2018-04-13 12:05:00.0 1 Consumption
    2018-04-13 12:05:00.0 2018-04-13 12:10:00.0 1 Consumption

猜你喜欢

转载自blog.csdn.net/qq_31866793/article/details/105470736