自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Flink SQL 知其所以然:Window TopN 操作

數據庫 其他數據庫
今天我們來學習 Flink SQL 中的 Window TopN 操作。

大家好,我是老羊,今天我們來學習 Flink SQL 中的 Window TopN 操作。

  1. Window TopN 定義(支持 Streaming):Window TopN 是一種特殊的 TopN,它的返回結果是每一個窗口內的 N 個最小值或者最大值。
  2. 應用場景:小伙伴萌會問了,我有了 TopN 為啥還需要 Window TopN 呢?還記得上文介紹 TopN 說道的 TopN 時會出現中間結果,從而出現回撤數據的嘛?Window TopN 不會出現回撤數據,因為 Window TopN 實現是在窗口結束時輸出最終結果,不會產生中間結果。而且注意,因為是窗口上面的操作,Window TopN 在窗口結束時,會自動把 State 給清除。
  3. SQL 語法標準:
SELECT [column_list]
FROM (
SELECT [column_list],
ROW_NUMBER() OVER (PARTITION BY window_start, window_end [, col_key1...]
ORDER BY col1 [asc|desc][, col2 [asc|desc]...]) AS rownum
FROM table_name) -- windowing TVF
WHERE rownum <= N [AND conditions]
  1. 實際案例:取當前這一分鐘的搜索關鍵詞下的搜索熱度前 10 名的詞條數據。

輸入表字段:

-- 字段名         備注
-- key 搜索關鍵詞
-- name 搜索熱度名稱
-- search_cnt 熱搜消費熱度(比如 3000)
-- timestamp 消費詞條時間戳
CREATE TABLE source_table (
name BIGINT NOT NULL,
search_cnt BIGINT NOT NULL,
key BIGINT NOT NULL,
row_time AS cast(CURRENT_TIMESTAMP as timestamp(3)),
WATERMARK FOR row_time AS row_time
) WITH (
...
);
-- 輸出表字段:
-- 字段名 備注
-- key 搜索關鍵詞
-- name 搜索熱度名稱
-- search_cnt 熱搜消費熱度(比如 3000)
-- window_start 窗口開始時間戳
-- window_end 窗口結束時間戳
CREATE TABLE sink_table (
key BIGINT,
name BIGINT,
search_cnt BIGINT,
window_start TIMESTAMP(3),
window_end TIMESTAMP(3)
) WITH (
...
);
-- 處理 sql:
INSERT INTO sink_table
SELECT key, name, search_cnt, window_start, window_end
FROM (
SELECT key, name, search_cnt, window_start, window_end,
ROW_NUMBER() OVER (PARTITION BY window_start, window_end, key
ORDER BY search_cnt desc) AS rownum
FROM (
SELECT window_start, window_end, key, name, max(search_cnt) as search_cnt
-- window tvf 寫法
FROM TABLE(TUMBLE(TABLE source_table, DESCRIPTOR(row_time), INTERVAL '1' MINUTES))
GROUP BY window_start, window_end, key, name
)
)
WHERE rownum <= 100

輸出結果:

+I[關鍵詞1, 詞條1, 8670, 2021-1-28T22:34, 2021-1-28T22:35]
+I[關鍵詞1, 詞條2, 6928, 2021-1-28T22:34, 2021-1-28T22:35]
+I[關鍵詞1, 詞條3, 1735, 2021-1-28T22:34, 2021-1-28T22:35]
+I[關鍵詞1, 詞條4, 7287, 2021-1-28T22:34, 2021-1-28T22:35]
...

可以看到結果是符合預期的,其中沒有回撤數據。

  1. SQL 語義。
  • 數據源:數據源即最新的詞條下面的搜索詞的搜索熱度數據,消費到 Kafka 中數據后,將數據按照窗口聚合的 key 通過 hash 分發(fā)策略發(fā)送到下游窗口聚合算子。
  • 窗口聚合算子:進行窗口聚合計算,隨著時間的推進,將窗口聚合結果計算完成發(fā)往下游窗口排序算子。
  • 窗口排序算子:這個算子其實也是一個窗口算子,只不過這個窗口算子為每個 Key 維護了一個 TopN 的榜單數據,接受到上游發(fā)送的窗口結果數據進行排序,隨著時間的推進,窗口的結束,將排序的結果輸出到下游數據匯算子。
  • 數據匯:接收到上游的數據之后,然后輸出到外部存儲引擎中。
責任編輯:姜華 來源: 大數據羊說
相關推薦

2022-06-29 09:01:38

FlinkSQL時間屬性

2022-06-10 09:01:04

OverFlinkSQL

2022-06-06 09:27:23

FlinkSQLGroup

2022-05-22 10:02:32

CREATESQL 查詢SQL DDL

2022-05-18 09:02:28

Flink SQLSQL字符串

2021-09-12 07:01:07

Flink SQL ETL datastream

2022-05-15 09:57:59

Flink SQL時間語義

2022-05-27 09:02:58

SQLHive語義

2021-12-09 06:59:24

FlinkSQL 開發(fā)

2022-06-18 09:26:00

Flink SQLJoin 操作

2021-11-28 11:36:08

SQL Flink Join

2022-05-12 09:02:47

Flink SQL數據類型

2021-11-24 08:17:21

Flink SQLCumulate WiSQL

2021-11-27 09:03:26

flink join數倉

2022-08-10 10:05:29

FlinkSQL

2021-12-17 07:54:16

Flink SQLTable DataStream

2022-07-12 09:02:18

Flink SQL去重

2022-05-09 09:03:04

SQL數據流數據

2021-12-13 07:57:47

Flink SQL Flink Hive Udf

2021-12-06 07:15:47

開發(fā)Flink SQL
點贊
收藏

51CTO技術棧公眾號