Parquet学习与使用之BloomFilter的应用
创始人
2024-05-29 15:50:16
0

写在前面

最近在自己做自定义的OLAP系统,文件格式上用的是Parquet,但是发现Parquet各个API的示例代码很少。所以就打算把这个系列的文章写一下。

1. Parquet的Filter

Parquet的过滤支持两大类,一类是基于Footer中的元数据进行RowGroup级别的过滤;这种过滤能够实现减少IO的目的,它通过元数据里的信息直接可以实现跳过RowGroup的读取。
另一类是对每一行进行过滤,此类对于减少IO没有作用,只是代码优雅一些,不用把所有的数据都读到客户端代码里进行过滤。

2. Parquet对RowGroup的过滤的基本介绍

当前最新版本1.12.x 中支持3类:

  1. 字典 - 如果列的值域空间不大,则用字典(parquet能够自己识别是否使用字典作为一列的过滤器)
  2. statistics - 数值型的min/max
  3. bloomFilter - 如果列值域比较大,则不是相对分段聚合的,则无法用1-2.则考虑用bloomFilter(如果使用bloomFilter需要在写入时指定要使用bloomFilter的列)

3. Parquet 应用BloomFilter的示例代码

3.1 写入Parquet文件

并指定user_id列使用BloomFilter

        ParquetWriter parquetWriter = AvroParquetWriter.builder(path).withSchema(userFlowTraceSchema).withCompressionCodec(CompressionCodecName.GZIP).withBloomFilterEnabled("user_id", true).build();
 

3.2 读取Parquet文件

目前BloomFilter仅支持Eq和In操作;其他类型和自定义的操作都直接被返回了 BLOCK_MIGHT_MATCH(true)- 即不过滤
源码见:org.apache.parquet.filter2.bloomfilterlevel.BloomFilterImpl

读取文件,并使用BloomFilter的示例:

GroupReadSupport readSupport = new GroupReadSupport();
String targetUserId1 = "9639102999811";
String targetUserId2 = "9639102999711";
Filter bloomFilterIn = FilterCompat.get(FilterApi.in(FilterApi.binaryColumn("user_id"),Sets.newHashSet(Binary.fromString(targetUserId1),Binary.fromString(targetUserId2))));
ParquetReader reader = ParquetReader.builder(readSupport, path).withFilter(bloomFilterIn).build();

相关内容

热门资讯

美团外卖怎么投诉 有效方法步骤... 点外卖时,我们偶尔也会与商家或者骑手发生不愉快。有时候只是一点小事,却因为彼此不好的态度而无法释怀,...
民生易贷是正规贷款吗?民生易贷...   民生助粒贷是属于民生易贷旗下运营的一款针对个人消费开放的信贷产品这款产品自上市以来就十分稳定,审...
灵活就业养老保险交哪个档次好?...   众所周知,灵活就业人员缴纳的养老保险有着不同的档次,选择不同的档次也意味着不同的投入和回报,那么...
微信怎么查医保卡余额,如何在微...   很多小伙伴都想要查询自己的社保卡的余额信息,但是去线下查询慢效率不高。但是其实在手机微信上就可以...
社保断交有什么影响?社保断交影...   很多小伙伴都知道社保需要每个月都交,但是社保断缴会怎么样呢?如果社保断缴会导致什么严重的后果吗?...
每年交7000社保15年领多少...   退休金是很多老人之后生活的凭据,那么自己缴纳十五年的社保,每年都交7000元,那么在退休之后能领...
退休金上调2022的最新消息,...   进入8月份,2022年的退休人员的养老金上涨,那么这一部分调整了什么内容呢?这是很多小伙伴啊都存...
公积金封存满6个月当天就能取?...   公积金是很多小伙伴在工作后都会交的,那么公积金封存后满6个月可以取吗?公积金封存之后可以提现吗?...
67类“示范文本”推广使用!对... 转自:新华社客户端“机动车交通事故责任纠纷中,受害人对于具体赔偿项目通常不清楚,示范文本将常见的12...
延迟退休年龄一览表2022,延...   现在延迟退休将于2022年开始启动,预计将在2027年实施,那么很多小伙伴就存在着疑惑了,不知道...