我有两张table:原始的和新的布卢姆过滤器。为int列创建的bloom筛选器(按和'orc.bloom.filter.columns'聚集)。在分区的hdfs中,我看到文件的数量=唯一值的数量在列中。但是当我查询这些表(从id=…)的表中选择min(…)时,请求会在同一时间完成执行。在作业日志和“解释-分析”中,我没有看到bloom过滤器的使用,请求读取整个分区。为了使bloom过滤器工作,请求执行得更快,并且不是读取分区中的所有文件,而是只读取一个具有所需id的文件,还需要配置什么?
我有两张table:原始的和新的布卢姆过滤器。为int列创建的bloom筛选器(按和'orc.bloom.filter.columns'聚集)。在分区的hdfs中,我看到文件的数量=唯一值的数量在列中。但是当我查询这些表(从id=…)的表中选择min(…)时,请求会在同一时间完成执行。在作业日志和“解释-分析”中,我没有看到bloom过滤器的使用,请求读取整个分区。为了使bloom过滤器工作,请求执行得更快,并且不是读取分区中的所有文件,而是只读取一个具有所需id的文件,还需要配置什么?
1条答案
按热度按时间h22fl7wq1#
布鲁姆过滤器并不是在所有情况下都有帮助。
orc包含文件级、条带级和行级的索引(对于10000行,可配置)。如果配置了ppd,则可以使用索引(最小值、最大值)来跳过读取文件(无论如何都将读取页脚部分),也可以跳过条带。这些索引对于筛选可排序的序列值和范围查询非常有用。比如整数。为了使索引更有效,您应该在插入时按索引键对数据进行排序。未排序索引效率不高,因为所有的条带都可以包含所有键。
插入过程中的排序可能很昂贵。
在大多数情况下,只有索引就足够了。
bloom过滤器是一种结构,它可以帮助以100%的概率检查密钥是否不存在于数据集中。
bloom过滤器对于相等查询非常有效,特别是对于非连续的未排序值(如GUID)。对于这样的值,最小/最大索引不能有效地工作。使用bloomfilter时,按特定guid进行筛选应该非常有效。
对于整数id之类的可排序序列值,存储在orc索引(排序)中的最小/最大值更好。