专业网站制作仪表多少钱,贵阳网络推广公司有哪些,江门站官网,wang域名的网站背景
在hive中使用Roaring64Bitmap实现精确去重功能 主要目的#xff1a;
提升 hive 中精确去重性能#xff0c;代替hive 中的 count(distinct uuid)#xff1b;节省 hive 存储 #xff0c;使用 bitmap 对数据压缩 #xff0c;减少了存储成本#xff1b;提供在 hive 中…背景
在hive中使用Roaring64Bitmap实现精确去重功能 主要目的
提升 hive 中精确去重性能代替hive 中的 count(distinct uuid)节省 hive 存储 使用 bitmap 对数据压缩 减少了存储成本提供在 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
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将numint或bigint 转化为 bitmapto_bitmap(num)bitmapbitmap_union多个bitmap合并为一个bitmap并集bitmap_union(bitmap)bitmapbitmap_count计算bitmap中存储的num个数bitmap_count(bitmap)longbitmap_and计算两个bitmap交集bitmap_and(bitmap1,bitmap2)bitmapbitmap_or计算两个bitmap并集bitmap_or(bitmap1,bitmap2)bitmapbitmap_xor计算两个bitmap差集bitmap_xor(bitmap1,bitmap2)bitmap
5. 在 hive 中创建 bitmap 类型表,导入数据并查询
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 实现精确去重
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;