Content

MySQL Flink Watermark实现事件时间处理的关键技术(ocp认证烂大街了吗)万万没想到

文章摘要

这篇文章主要介绍了如何在数据库中创建带有时间戳和水印的表,并通过查询SQL进行数据窗口计算。具体来说: 1. **表创建**:创建了`source_table`表,包含`user_id`、`price`、`timestamp`等字段,并使用`TO_TIMESTAMP`和`FROM_UNIXTIME`生成时间戳。表的连接方式为`socket`,连接到`node1`,端口为9999,输出格式为CSV。 2. **水印解释**:解释了`WATERMARK`关键字的作用,允许数据延迟2秒到达,触发计算窗口的开始时间。 3. **查询SQL**:展示了如何通过`tumble`函数对数据进行窗口分组,并计算窗口的时间范围。查询中使用了`UNIX_TIMESTAMP`将时间戳转换为整数,并分组统计用户ID、窗口PV和PV金额等信息。 总结:文章通过实例展示了如何在数据库中设置带有水印的表结构,并利用时间窗口功能进行数据分组和延迟计算。

#1.创建表 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,表示,数据允许延迟2秒钟到达,窗口会在(正常结束+延迟时间)后触发计算 #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);