【问题标题】:why bloom filters do not work, tell me please为什么布隆过滤器不起作用,请告诉我
【发布时间】:2020-03-05 16:47:15
【问题描述】:

我有两个表:原始表和带有布隆过滤器的新表。为 int 列创建的布隆过滤器( CLUSTERED BY 和 'orc.bloom.filter.columns')。在分区中的hdfs中,我看到文件数=列中唯一值的数量。但是当我查询(从 id = ... 的表中选择 min(...))这些表时,请求会同时完成执行。在作业日志和“解释分析”中,我没有看到布隆过滤器的使用,并且请求读取了整个分区。为了使布隆过滤器工作,请求执行得更快,并且不是分区中的所有文件都被读取,而只有一个具有所需 id 的文件,还需要配置什么?

【问题讨论】:

    标签: indexing hive orc bloom-filter


    【解决方案1】:

    布隆过滤器并非在所有情况下都有帮助。

    ORC 包含文件级别、条带级别和行级别的索引(对于 10000 行,可配置)。 如果配置了 PPD,可以使用索引(最小值、最大值)跳过读取文件(页脚部分将被读取),也可以跳过条纹。 这些索引对于过滤可排序的顺序值和范围查询很有用。例如整数。 为了提高索引效率,您应该在插入时按索引键对数据进行排序。未排序索引效率不高,因为所有条带都可以包含所有键。

    在插入期间排序可能会很昂贵。

    在大多数情况下,只有索引就足够了。

    布隆过滤器是一种结构,可以帮助检查数据集中是否存在 100% 的概率。

    布隆过滤器对相等查询非常有效,尤其是对于非连续的未排序值,如 GUID。 MIN/MAX 索引对于这些值不能有效地工作。使用布隆过滤器按特定 GUID 过滤应该非常有效。

    对于整数 id 等可排序的顺序值,存储在 ORC 索引(已排序)中的最小/最大值更好。

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多