49-flink sql時間函數實現每周某幾天和某些天的指定時間段條件


業務:指定窗口時間,統計每周一到周五,凌晨00點到早上八點的事件條數,超過N次觸發輸出結果

事件時間格式:yyyy-MM-dd HH:mm:ss.SSS,字段名ts

使用到的函數:DAYOFWEEK(timestamp timestamp),DATE_FORMAT(date,pattern)   concat(string1,string2,...)

數據源:

drop table aa;
CREATE TABLE IF NOT EXISTS aa (
    `timestamp` VARCHAR,
    `logLevel` VARCHAR, 
    `threadName` VARCHAR,
    `componentId` VARCHAR,    
    ts as TO_TIMESTAMP(`timestamp`,'yyyy-MM-dd HH:mm:ss.SSS')
)
    WITH (  
        'connector' = 'kafka',
        'format' = 'json',
        'properties.bootstrap.servers' = '10.19.120.97:9092,10.19.120.98:9092,10.19.120.99:9092',
        'scan.startup.mode' = 'earliest-offset',
        'topic' = 'logaudit_20220209',
        'properties.group.id' = '02'
        );

執行如下可查看時間字段和格式的結果:

 

select

DAYOFWEEK(timestamp '2022-02-15 16:58:45.000'),

DATE_FORMAT('2022-02-17 10:11:12.100','HH-mm-ss.SSS'),

DATE_FORMAT('2022-02-17 10:11:12.100','HH:mm:ss'),

DATE_FORMAT('2022-02-17 10:11:12.100','HH:mm:ss.SSS'),

concat( DATE_FORMAT( '2022-02-17 10:11:12.100', 'yyyy-MM-dd' ), ' 02:00:00.000' )

查詢表aa中ts為周日的記錄

DAYOFWEEK函數返回時間戳對應的是周幾,注意周日是1,周一是2.......周六是7

select * from aa where DAYOFWEEK(ts) = 1

如何表達當月

where date_format( ts,'%Y-%m' ) = date_format( now(),'%Y-%m' )

每周的周一到周三下午4點和5點的事件,這樣寫

SELECT ts FROM source_kafka 
where DAYOFWEEK(ts) >1 
and DAYOFWEEK(ts)<5 
and ts > concat( DATE_FORMAT( ts, 'yyyy-MM-dd' ), ' 16:00:00' ) and ts < concat( DATE_FORMAT( ts, 'yyyy-MM-dd' ), ' 17:00:00' )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM