前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【拿走不谢】大数据高效查询神器--bitmap

【拿走不谢】大数据高效查询神器--bitmap

作者头像
不吃西红柿
发布2022-09-19 11:01:44
1.1K0
发布2022-09-19 11:01:44
举报
文章被收录于专栏:信息技术智库信息技术智库

背景

在hive中使用Roaring64Bitmap实现精确去重功能 主要目的:

  1. 提升 hive 中精确去重性能,代替hive 中的 count(distinct uuid);
  2. 节省 hive 存储 ,使用 bitmap 对数据压缩 ,减少了存储成本;
  3. 提供在 hive 中 bitmap 的灵活运算 ,比如:交集、并集、差集运算 ,计算后的 bitmap 也可以直接写入 hive;
在这里插入图片描述
在这里插入图片描述

使用

1.github地址

https://github.com/lihuigang/hive-bitmap-udf

2.下载地址:

https://github.com/lihuigang/hive-bitmap-udf/releases/download/v1.0.1/hive-bitmap-udf.jar

3.在hive中创建自定义 bitmap UDF

代码语言:javascript
复制
add jar hdfs://node:9000/hive-bitmap-udf.jar;

CREATE TEMPORARY FUNCTION to_bitmap AS 'com.hive.bitmap.udf.ToBitmapUDAF';
CREATE TEMPORARY FUNCTION bitmap_union AS 'com.hive.bitmap.udf.BitmapUnionUDAF';
CREATE TEMPORARY FUNCTION bitmap_count AS 'com.hive.bitmap.udf.BitmapCountUDF';
CREATE TEMPORARY FUNCTION bitmap_and AS 'com.hive.bitmap.udf.BitmapAndUDF';
CREATE TEMPORARY FUNCTION bitmap_or AS 'com.hive.bitmap.udf.BitmapOrUDF';
CREATE TEMPORARY FUNCTION bitmap_xor AS 'com.hive.bitmap.udf.BitmapXorUDF';

4.UDF说明

UDF

描述

案例

结果类型

to_bitmap

将num(int或bigint) 转化为 bitmap

to_bitmap(num)

bitmap

bitmap_union

多个bitmap合并为一个bitmap(并集)

bitmap_union(bitmap)

bitmap

bitmap_count

计算bitmap中存储的num个数

bitmap_count(bitmap)

long

bitmap_and

计算两个bitmap交集

bitmap_and(bitmap1,bitmap2)

bitmap

bitmap_or

计算两个bitmap并集

bitmap_or(bitmap1,bitmap2)

bitmap

bitmap_xor

计算两个bitmap差集

bitmap_xor(bitmap1,bitmap2)

bitmap

5. 在 hive 中创建 bitmap 类型表,导入数据并查询

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `hive_bitmap_table`
( 
    k      int      comment 'id',
    bitmap binary   comment 'bitmap'
) comment 'hive bitmap 类型表' 
STORED AS ORC;

-- 数据写入
insert into table  hive_bitmap_table select  1 as id,to_bitmap(1) as bitmap;
insert into table hive_bitmap_table select  2 as id,to_bitmap(2) as bitmap;

-- 查询

select bitmap_union(bitmap) from hive_bitmap_table;
select bitmap_count(bitmap_union(bitmap)) from hive_bitmap_table;

6. 在 hive 中使用 bitmap 实现精确去重

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `hive_table`
( 
    k      int      comment 'id',
    uuid   bigint   comment '用户id'
) comment 'hive 普通类型表' 
STORED AS ORC;

-- 普通查询(计算去重人数)

select count(distinct uuid) from hive_table;

-- bitmap查询(计算去重人数)

select bitmap_count(to_bitmap(uuid)) from hive_table;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 使用
    • 1.github地址
      • 2.下载地址:
        • 3.在hive中创建自定义 bitmap UDF
          • 4.UDF说明
            • 5. 在 hive 中创建 bitmap 类型表,导入数据并查询
              • 6. 在 hive 中使用 bitmap 实现精确去重
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档