现有此场景: 计算每天员工的业绩(只计算当天的)
现在我用flink-sql 的方式,insert into select current_date, count(1) ,worker from XX where writeTime>=current_date group by worker; 把数据按天分区的方式先把数据sink到mysql
但是发现落地到mysql的数据把前几天的数据都给算进来了,如何只算今天的数据? 另外还有一个疑惑,如何既计算当天数据,又包含了本月的所有数据?*来自志愿者整理的flink
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
用户希望使用Flink SQL按天统计员工业绩,仅计算每天的数据并sink到MySQL。但实际操作中发现数据包含了前几天的记录,而非仅限于当天。此外,用户还想知道如何在同一个查询中既计算当天数据,又能汇总本月的所有数据。
确保writeTime
字段正确过滤当天数据:
writeTime
字段是时间戳类型,并且在where子句中正确地使用日期函数来限定只选取今天的记录。例如,如果writeTime
包含日期和时间信息,应使用类似DATE(writeTime) = CURRENT_DATE
的条件来精确筛选当天数据。INSERT INTO daily_performance
SELECT CURRENT_DATE, COUNT(1), worker
FROM XX
WHERE DATE(writeTime) = CURRENT_DATE -- 确保只选择今天的记录
GROUP BY worker;
检查事件时间处理配置:
-- 计算当天数据
INSERT INTO today_performance
SELECT CURRENT_DATE, COUNT(1), worker
FROM XX
WHERE DATE(writeTime) = CURRENT_DATE
GROUP BY worker;
-- 计算本月所有数据(假设writeTime字段可以准确区分月份)
INSERT INTO this_month_performance
SELECT DATE_FORMAT(CURRENT_DATE, 'yyyy-MM') AS month, COUNT(1), worker
FROM XX
WHERE DATE_FORMAT(writeTime, 'yyyy-MM') = DATE_FORMAT(CURRENT_DATE, 'yyyy-MM') -- 确保只选择本月的记录
GROUP BY worker;
要解决只计算当天数据的问题,需确保where子句正确使用日期函数限制时间范围。若需同时处理当天和当月数据,可以通过构造独立的查询分别sink到不同表或视图中。注意时区、性能和数据分区策略的优化。