flink sql实现interval join的图解
生活随笔
收集整理的這篇文章主要介紹了
flink sql实现interval join的图解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
完整SQL代碼
https://gitee.com/appleyuchi/Flink_Code/blob/master/flink-sql-cookbook/SQL/Interval_Joins.sql
基本概念
TIMESTAMPDIFF的作用
mysql> select TIMESTAMPDIFF(DAY, '2018-03-20 23:59:00', '2015-03-22 00:00:00'); +------------------------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2018-03-20 23:59:00', '2015-03-22 00:00:00') | +------------------------------------------------------------------+ | -1094 | +------------------------------------------------------------------+意思是:
2015年的某天-2018年的某天=天數差是-1094天
?
另外,上述SQL中涉及的訂單表和發(fā)貨表都是數據更新很快的表格.
所以這兩張表都屬于事實表.
此例屬于兩個事實表進行Join操作.
?
Interval Join查詢語句
SELECTo.id AS order_id,o.order_time,s.shipment_time,TIMESTAMPDIFF(DAY,o.order_time,s.shipment_time) AS day_diff FROM orders o JOIN shipments s ON o.id = s.order_id WHERE o.order_time BETWEEN s.shipment_time - INTERVAL '3' DAY AND s.shipment_time;上述SQL語句的含義是:
| SQL語句部分 | 業(yè)務含義 |
| o.id AS order_id | 訂單ID |
| o.order_time | 下單時間 |
| s.shipment_time | 發(fā)貨時間 |
| TIMESTAMPDIFF(DAY,o.order_time,s.shipment_time) | 發(fā)貨時間與下單時間的差 |
| FROM orders o JOIN shipments s ON o.id = s.order_id | 兩張表(orders與shipments)中下單ID等于發(fā)貨ID的數據 |
| o.order_time BETWEEN s.shipment_time - INTERVAL '3' DAY AND s.shipment_time; | 計算下單后3天內發(fā)貨的訂單 |
?
上述最后一部分的圖解如下:
?
上面的圖被誤傷,下面的圖是重新畫的。
這個圖的意思是:
查詢下單后3天內發(fā)貨的訂單。
?
?
總結
以上是生活随笔為你收集整理的flink sql实现interval join的图解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink SQL Client注册JA
- 下一篇: Every column needs a