slipstream去重

  使用配置
内容纲要

背景

消除重复数据是非常重要的功能。实时计算中的去重由于实时计算的特性,是一个增量的长期的过程,并且由于实时数据流是有状态的,所以在不同的场景下,去重的方案也不一样。


窗口去重(短时间去重):

窗口去重基于group by的集合器内去重,该场景将窗口内的所有key存入Hashmap,通过Hashmap的key的union特性来实现去重。

通过Hashmap去重的问题是,只能做到窗口去重,没办法基于全量数据做去重。

使用方法如下:

select count(distinct id), sum(price) from orders group by product_id;

全量数据有状态去重(长时间去重):

目前方案是所有key存在hbase,通过hbase查询(或glk join)来判断是否存在重复的数据。这种方案引入了中间kafka以及hbase,将一个场景拆分成多个任务,整体较为冗余。

对流入的数据流进行去重得到一个无重复数据的数据流,然后基于衍生数据流的来进行下一步处理。

使用方法如下:

INSERT INTO {target table}
SELECT *
FROM {source table}
DISTINCT BY {source distinct column}
ON {distinct table}.{distinct column};

关于窗口函数与distinct

slipstream支持窗口函数ROW_NUMBER()的查询,但是在流任务中不支持。distinct在老版本的使用上存在一些bug。对于流中出现的这两种语法,需要特别关注一下。

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。