MySQL Flink Watermark實現(xiàn)事件時間處理的關(guān)鍵技術(shù)
1.概述
生活中有種場景:
車輛進入隧道,信號不好,出了隧道后,信號就正常了。
正常情況下,車輛進入隧道后,如果車輛正常,沒有事故,會正常駛出隧道。
在正常的隧道行駛過程中,可能會因為信號的原因,導致數(shù)據(jù)沒有像信號正常的時候那么快到達。
也就是說,這種情況下,數(shù)據(jù)出現(xiàn)了延遲。我們把這種延遲數(shù)據(jù)稱之為遲到數(shù)據(jù)。
生活中,這種場景非常多,比如:車輛進入地下車庫,手機欠費,網(wǎng)絡(luò)抖動等。這都屬于生活的正常情況。無法避免。
程序中,一般不會允許數(shù)據(jù)丟失。所以,我們程序會推出一些機制來保證遲到數(shù)據(jù)被正常處理。
Watermark就是用來保證正常遲到的數(shù)據(jù)被正確的處理。
Watermark,也叫水印,或者是水位線。用來處理一定程度下的延遲數(shù)據(jù)。
2.SQL案例-演示W(wǎng)atermark為零的情況
#1.創(chuàng)建表
CREATE TABLE source_table (
user_id STRING,
price BIGINT,
`timestamp` bigint,
row_time AS TO_TIMESTAMP(FROM_UNIXTIME(`timestamp`)),
watermark for row_time as row_time - interval '0' second
) WITH (
'connector' = 'socket',
'hostname' = 'node1',
'port' = '9999',
'format' = 'csv'
);
#2.數(shù)據(jù)查詢SQL
select
user_id,
count(*) as pv,
sum(price) as sum_price,
UNIX_TIMESTAMP(CAST(tumble_start(row_time, interval '5' second) AS STRING)) * 1000 as window_start,
UNIX_TIMESTAMP(CAST(tumble_end(row_time, interval '5' second) AS STRING)) * 1000 as window_end
from source_table
group by
user_id,
tumble(row_time, interval '5' second);3.SQL案例-演示W(wǎng)atermark不為零的情況
Watermark不為零,就有可能是兩種情況:
- 小于0,窗口會提前觸發(fā)計算,這種情況在實際應(yīng)用不存在,所以這里也不討論
- 大于0,窗口會延遲觸發(fā)計算,延遲的時間就是我們設(shè)置的Watermark的值
這里,我們主要是討論Watermark>0的情況。
#1.創(chuàng)建表
CREATE TABLE source_table (
user_id STRING,
price BIGINT,
`timestamp` bigint,
row_time AS TO_TIMESTAMP(FROM_UNIXTIME(`timestamp`)),
watermark for row_time as row_time - interval '2' second
) WITH (
'connector' = 'socket',
'hostname' = 'node1',
'port' = '9999',
'format' = 'csv'
);
#2.Watermark的解釋
WATERMARK FOR ts AS ts - INTERVAL '2' SECOND
這里的2,表示,數(shù)據(jù)允許延遲2秒鐘到達,窗口會在(正常結(jié)束+延遲時間)后觸發(fā)計算
#3.查詢SQL
select
user_id,
count(*) as pv,
sum(price) as sum_price,
UNIX_TIMESTAMP(CAST(tumble_start(row_time, interval '5' second) AS STRING)) * 1000 as window_start,
UNIX_TIMESTAMP(CAST(tumble_end(row_time, interval '5' second) AS STRING)) * 1000 as window_end
from source_table
group by
user_id,
tumble(row_time, interval '5' second);到此這篇關(guān)于MySQL Flink Watermark實現(xiàn)事件時間處理的關(guān)鍵技術(shù)的文章就介紹到這了,更多相關(guān)MySQL Flink Watermark內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在windows環(huán)境下配置并隨意切換兩種mysql版本的方法
這篇文章主要介紹了mysql:如何在windows環(huán)境下配置并隨意切換兩種mysql版本,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01
SQL實戰(zhàn)演練之網(wǎng)上商城數(shù)據(jù)庫用戶信息數(shù)據(jù)操作
一直認為,扎實的SQL功底是一名數(shù)據(jù)分析師的安身立命之本,甚至可以稱得上是所有數(shù)據(jù)從業(yè)者的基本功。當然,這里的SQL絕不單單是寫幾條查詢語句那么簡單,接下來請跟著小編通過案例項目進一步提高SQL的能力吧2021-10-10
MySql用DATE_FORMAT截取DateTime字段的日期值
MySql截取DateTime字段的日期值可以使用DATE_FORMAT來格式化,使用方法如下2014-08-08

