需求:
统计每5分钟内的活跃用户数,并写入mysql,mysql数据结构如下图所示。
时间 | 活跃用户数 |
10:00 | 2 |
10:05 | 4 |
10:10 | 3 |
废话不多说,直接上sql
select
p_product,
p_project,
p_dt,
SUBSTRING(FROM_UNIXTIME(UNIX_TIMESTAMP(p_ts)/ 300 * 300), 12, 5),
count(distinct device_id)
from
hive_catalog.t_kafka
/*+ OPTIONS ('connector.properties.group.id'='my_group') */
group by
p_product,
p_project,
p_dt,
SUBSTRING(FROM_UNIXTIME(UNIX_TIMESTAMP(p_ts)/ 300 * 300), 12, 5)
其中p_ts 是事件时间。
写入mysql代码如下
.addSink(JdbcSink.sink("insert into active_num_5m(p_product,p_project,p_dt,event_time,num ) values(?,?,?,?,?) on duplicate key update num=values(num)",
(JdbcStatementBuilder<Row>) (preparedStatement, row) -> {
preparedStatement.setString(1,getRowStr(row.getField(0)));
preparedStatement.setString(2,getRowStr(row.getField(1)));
preparedStatement.setString(3,getRowStr(row.getField(2)));
preparedStatement.setString(4,getRowStr(row.getField(3)));
preparedStatement.setInt(5, NumberUtils.createInteger(getRowStr(