PiflowX-TopN组件

TopN组件

组件说明

按列排序的N个最小值或最大值。

有界性

batch streaming

计算引擎

flink

组件分组

common

端口

Inport:默认端口

outport:默认端口

组件属性

名称 展示名称 默认值 允许值 是否必填 描述 例子
column_list column_list "*" 查询字段 name,age
partition_list partition_list 分区字段 name,age
order_list order_list 排序字段 name->asc,age-desc
tableName tableName 表名 test
topNum topNum TopN的条⽬数 10
conditions conditions 查询条件 age > 10 and name = 'test'
isWindow isWindow false Set("ture", "false") 是否窗口TopN false

TopN示例配置

json 复制代码
{
    "flow":{
        "name":"topDemo",
        "uuid":"59e583d074b44985aee2ad70a2547a77",
        "runMode":"DEBUG",
        "paths":[
            {
                "inport":"",
                "from":"JDBCRead",
                "to":"TopN",
                "outport":""
            },
            {
                "inport":"",
                "from":"TopN",
                "to":"ShowChangeLogData",
                "outport":""
            }
        ],
        "environment":{
            "runtimeMode":"batch"
        },
        "engineType":"flink",
        "stops":[
            {
                "name":"JDBCRead",
                "bundle":"cn.piflow.bundle.flink.jdbc.JDBCRead",
                "uuid":"31998ca1fbea45b5a6799a6150300cf6",
                "properties":{
                    "url":"jdbc:mysql://192.168.186.100:3306/test",
                    "username":"root",
                    "fetchSize":"100",
                    "driver":"",
                    "properties":{

                    },
                    "tableName":"source_table",
                    "tableDefinition":{
                        "tableBaseInfo":{
                            "registerTableName":"source_table"
                        },
                        "physicalColumnDefinition":[
                            {
                                "columnName":"name",
                                "columnType":"STRING"
                            },
                            {
                                "columnName":"search_cnt",
                                "columnType":"BIGINT"
                            },
                            {
                                "columnName":"key",
                                "columnType":"STRING"
                            },
                            {
                                "columnName":"row_time",
                                "columnType":"TIMESTAMP"
                            }
                        ],
                        "asSelectStatement":{

                        },
                        "likeStatement":{

                        }
                    },
                    "password":"123456"
                },
                "customizedProperties":{

                }
            },
            {
                "name":"TopN",
                "bundle":"cn.piflow.bundle.flink.common.TopN",
                "uuid":"08726631225d4dcca00dc532a83c7344",
                "properties":{
                    "partition_list":"key",
                    "conditions":"",
                    "order_list":"search_cnt->desc",
                    "column_list":"key, name, search_cnt, row_time",
                    "tableName":"source_table",
                    "topNum":"10",
                    "isWindow":"false"
                },
                "customizedProperties":{

                }
            },
            {
                "name":"ShowChangeLogData",
                "bundle":"cn.piflow.bundle.flink.common.ShowChangeLogData",
                "uuid":"6225e5ac18704ed0aa1c95e3fbe1ce28",
                "properties":{
                    "showNumber":"100"
                },
                "customizedProperties":{

                }
            }
        ]
    }
}
参考示例

Flink SQL TopN语句详解 - 知乎 (zhihu.com)(https://zhuanlan.zhihu.com/p/665480015)

实际案例:取某个搜索关键词下的搜索热度前 10 名的词条数据。

输⼊数据为搜索词条数据的搜索热度数据,当搜索热度发⽣变化时,会将变化后的数据写⼊到数据源的 Kafka 中:

sql 复制代码
数据源 schema:
​
-- 字段名 备注
-- key 搜索关键词
-- name 搜索热度名称
-- search_cnt 热搜消费热度(⽐如 3000)
-- timestamp 消费词条时间戳
CREATE TABLE source_table (
 name STRING NOT NULL,
 search_cnt BIGINT NOT NULL,
 key STRING NOT NULL,
 row_time timestamp(3),
 WATERMARK FOR row_time AS row_time
) WITH (
 'connector' = 'filesystem', 
 'path' = 'file:///Users/hhx/Desktop/source_table.csv',
 'format' = 'csv'
);
​
A,100,a,2021-11-01 00:01:03
A,200,a,2021-11-02 00:01:03
A,300,a,2021-11-03 00:01:03
B,200,b,2021-11-01 00:01:03
B,300,b,2021-11-02 00:01:03
B,400,b,2021-11-03 00:01:03
C,300,c,2021-11-01 00:01:03
C,400,c,2021-11-02 00:01:03
C,500,c,2021-11-03 00:01:03
D,400,d,2021-11-01 00:01:03
D,500,d,2021-11-02 00:01:03
D,600,d,2021-11-03 00:01:03
​
-- 数据汇 schema:
-- key 搜索关键词
-- name 搜索热度名称
-- search_cnt 热搜消费热度(⽐如 3000)
-- timestamp 消费词条时间戳
CREATE TABLE sink_table (
 key BIGINT,
 name BIGINT,
 search_cnt BIGINT,
 `timestamp` TIMESTAMP(3)
) WITH (
 ...
);
​
-- DML 逻辑
INSERT INTO sink_table
SELECT key, name, search_cnt, row_time as `timestamp`
FROM (
 SELECT key, name, search_cnt, row_time, 
 -- 根据热搜关键词 key 作为 partition key,然后按照 search_cnt 倒排取前 2 名
 ROW_NUMBER() OVER (PARTITION BY key ORDER BY search_cnt desc) AS rownum
 FROM source_table)
WHERE rownum <= 2

演示视频

PiflowX-TopN组件_哔哩哔哩_bilibili

PiflowX-TopN组件

相关推荐
Hello.Reader7 小时前
在 YARN 上跑 Flink CDC从 Session 到 Yarn Application 的完整实践
大数据·flink
心止水j7 小时前
hive分区
数据仓库·hive·hadoop
心止水j8 小时前
Hive 桶表的创建、数据导入、查询与导出
数据仓库·hive·hadoop
pale_moonlight10 小时前
九、Spark基础环境实战((上)虚拟机安装Scala与windows端安装Scala)
大数据·分布式·spark
二进制_博客10 小时前
eventTime+watermarker+allowedLateness到底窗口关闭时间是什么?
flink·kafka
2501_9414037620 小时前
Python高性能图像识别与TensorFlow实战分享:深度学习模型优化与批量推理经验
flink
Bug快跑-12 天前
面向高并发场景的多语言异构系统架构演进与性能优化策略深度解析实践分享全过程方法论探索
flink
青云交2 天前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度
Hello.Reader3 天前
在 Flink Standalone 集群上运行 Flink CDC从下载到跑起一个 MySQL→Doris 同步任务
大数据·mysql·flink
A尘埃3 天前
Flink实时数据处理
大数据·flink·实时数据处理