阅读报告
阅读文献:P.B.Gibbons,“Distinct sampling for high-accurate answers to disticnct values queries andevents report”, Intl. Conf. on Very Large Databases, pp.541-550, 2001.
解决问题:在大数据量的数据中找出一个关键属性的不同值的个数的采样精确估计求解
SQL范例: select count(distinct o_custkey)
From orders
Where o_orderdate >= ‘2012-01-01’ (今年有多少不同的顾客下了订单)
运行效果:1%的采样率(原本文件1%的样本大小)达到0-10%的相关误差,比之前方法的50%-250%的相关误差的方法的运行速度提高了2-4个数量级。只需要浏览整个数据一遍。
具体方法:
算法伪代码:
L是哈希函数的值域中的值,作为决定是否保留在样本中的凭据。B是样本的大小。T是每个关键属性的不同值的记录保存的最大条数,cv表示关键属性v在样本中的最大相同数量。
算法中使用的die-hash不是均匀hash,而是按照2的幂递减的。也就是说die-hash到i的概率是2^(i+1),从0-较大的i的概率之和为1。
估计结果=|S| * 2 ^L
算法执行样例:
算法优点:
增量处理:可以在较小的内存和时间消耗情况下更新数据插入和删除之后的结果,适用于流式数据增量处理。只需要保存L和t这两个定义模型和die-hash的系数。插入新的数据只需要再执行算法中的步骤4-16,而删除操作只需要将样本中对应的记录删除即可。
支持join操作:算法可以支持关键属性的join操作,具体解决办法与
相同。
算法缺陷:
模型构建和算法模型都相对比较复杂。