为了实现类似等价的sql:
SELECT COUNT(DISTINCT deviceID) FROM t_order_report;
为什么我要说类似等价呢? 因为从精确性、性能等角度还是存在很大的差别!
前置条件,场景为:
如果你对去重结果的精准度没有特殊要求,使用cardinality聚合函数
如果你对去重结果要求精确,使用termsagg聚合(类似group by)
size(Integer.MAX_VALUE)可以指定桶个数
针对海量数据去重(多桶)场景,方法尝试:
缺点:性能不达标
总结:目前elasticsearch 对海量数据去重,支持的并不友好,暂无好的解决方案