BloomFilter在Drois中的应用

news2024/10/7 12:21:13

1.简介:

BloomFilter是一种多哈希函数映射的快速查找算法,它实际上是由一个超长的二进制位数组和一系列的哈希函数组成的。初始时二进制位数组全部为0,当给定一个待查询的元素时,这个元素会被一系列哈希函数计算映射出一系列的值,所有的值在位数组的偏移量处置为1,当该元素经过哈希函数计算后会得到所有的偏移位置,若这些位置全都为1,则判断该元素在这个集合中,若有一个不为1,则判断该元素不在这个集合中。

由于BloomFilter是一组哈希函数映射出来的结果,因此通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合,BloomFilter有以下特点:

1.空间效率高的概率型数据结构,用来检查一个元素是否在一个集合中;

2.对于一个元素检测是否存在的调用,BloomFilter会告诉调用者两个结果之一:可能存在或者一定不存在;

3.缺点是存在误判,告诉你可能存在,不一定真实存在;

例如:

前提条件:一个集合中,包含一些元素(j,q,k…),这些元素通过3个不同的哈希函数(x1,y1,z1)映射在二进制数组的比特位上。

当a元素由x1,y1和z1三个不同哈希函数映射在二进制数组上时,映射后三个位置的数值都等于1,因此,a元素可能存在于这个集合中。
在这里插入图片描述

当b元素由x1,y1和z1三个不同哈希函数映射在二进制数组上时,映射后有一个位置的数值等于0,因此b元素一定不在这个集合中。

在这里插入图片描述

2.Doris BloomFilter索引的使用:

Doris会自动在底层尽可能的使用一些索引和过滤机制,优化执行计划。但同时我们也可以手动创建BloomFilter索引。Doris的BloomFilter索引可以通过建表的时候指定,也可以通过表的ALTER操作来完成。

2.1创建BloomFilter索引:

可以通过在建表语句的PROPERTIES里加上"bloom_filter_columns"="c1,c2,c3"属性来创建Doris BloomFilter索引。c1,c2,c3是你要创建的BloomFilter索引的Key列名称。

CREATE TABLE `ods_test_bloom_delta` (
  `erdat` date NOT NULL COMMENT "",
  `vbelv` varchar(20) NULL COMMENT "",
  `posnv` varchar(10) NULL COMMENT "",
  `vbeln` varchar(20) NULL COMMENT "",,
  `city_org_code` varchar(20) NULL COMMENT "",
  `create_time` datetime NULL COMMENT ""
) ENGINE=OLAP
UNIQUE KEY(`erdat`, `vbelv`)
COMMENT "test_bloom"
PARTITION BY RANGE(`erdat`)
(PARTITION P_000000 VALUES [('0000-01-01'), ('2023-01-01')),
PARTITION P_202301 VALUES [('2023-01-01'), ('2023-02-01')),
PARTITION P_202302 VALUES [('2023-02-01'), ('2023-03-01')),
PARTITION P_202303 VALUES [('2023-03-01'), ('2023-04-01')),
PARTITION P_202304 VALUES [('2023-04-01'), ('2023-05-01')),
PARTITION P_202305 VALUES [('2023-05-01'), ('2023-06-01')),
PARTITION P_202306 VALUES [('2023-06-01'), ('2023-07-01')))
DISTRIBUTED BY HASH(`vbelv`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 3",
"bloom_filter_columns"="posnv,vbeln",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "MONTH",
"dynamic_partition.time_zone" = "Asia/Shanghai",
"dynamic_partition.start" = "-2147483648",
"dynamic_partition.end" = "2",
"dynamic_partition.prefix" = "P_",
"dynamic_partition.replication_allocation" = "tag.location.default: 3",
"dynamic_partition.buckets" = "1",
"in_memory" = "false",
"storage_format" = "V2"
);
2.2修改BloomFilter索引
alter TABLE ods_test_bloom_delta SET ("bloom_filter_columns" = "city_org_code");
2.3删除BloomFilter索引
ALTER TABLE ods_test_bloom_delta SET ("bloom_filter_columns" = "");
2.4根据执行计划查看是否使用了BloomFilter索引:

根据explain可以查看执行计划,如图所示就说明查询已经使用了bloomFilter;

在这里插入图片描述

3.Doris BloomFilter使用场景及注意事项:

应用场景:

满足以下几个条件时可以考虑对某列建立Bloom Filter 索引:

1.首先BloomFilter适用于非前缀过滤.

2.查询会根据该列高频过滤,而且查询条件大多是in和 = 过滤.

3.不同于Bitmap, BloomFilter适用于高基数列。比如UserID。因为如果创建在低基数的列上,比如”性别“列,则每个Block几乎都会包含所有取值,导致BloomFilter索引失去意义。

注意事项:

1.不支持对Tinyint、Float、Double 类型的列建Bloom Filter索引。

2.Bloom Filter索引只对in和 = 过滤查询有加速效果。

3.如果要查看某个查询是否命中了Bloom Filter索引,可以通过查询的Profile信息查看

4.最后:

欢迎指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【redis】布隆过滤器BloomFitter

【redis】布隆过滤器BloomFitter 文章目录 【redis】布隆过滤器BloomFitter前言一、面试题二、是什么1、设计思想: 本质就是判断具体数据是否存在于一个大的集合当中 三、布隆过滤器特点1、重点 有,是可能有,无是一定无2、小总结 四、原理1、…

Node【包】

文章目录 🌟前言🌟Nodejs包🌟什么是包?🌟自定义包🌟包配置文件🌟示例🌟Package.json 属性说明🌟语义化版本号🌟package.json示例 🌟符合CommonJS规…

怎么做好管综深化设计?高效就靠它

管线综合深化设计是指将设计阶段完成的机电管线进一步深化排布,结合建筑装修的要求,根据管线不同的性质与功能统筹管线位置排布。管线综合是 BIM 技术现阶段最基础也是应用最广泛的点,如何使机电各系统的使用功能效果达到最佳,整体…

(排序11)排序的时间复杂度,空间复杂度,稳定性总结

图片总结 内排序时间复杂度总结 内部排序:数据元素全部放在内存中的排序。. 在内排序当中比较快的有希尔排序,堆排序,快速排序,归并排序,这四个排序的时间复杂度都是O(n*logn)。其中希尔排序的时间复杂度更加准确的来…

RB-PEG-COOH,罗丹明聚乙二醇羧基;RhodamineB-PEG-acid;RB-PEG2000-COOH

RB-PG-COOH, 罗丹明聚乙二醇羧基 中文名称:罗丹明-聚乙二醇-羧基 英文名称:RhodamineB-PEG-acid RB-PEG-COOH 性状:固体或粘性液体,取决于分子量 溶剂:溶于水和DCM、DMF、DMSO等常规性有机溶剂 分子量&#xff1…

MySQL运维28-MySQL复制

文章目录 1、MySQL复制模式2、MySQL复制的兼容性3、与MySQL复制相关的两种日志3.1、中继日志3.2、MySQL复制的状态日志 4、MySQL主从复制的实施示例4.1、主从库安装4.2、主库配置4.3、从库的配置4.4、启动复制和确认成功 5、对MySQL复制的监控6、MySQL监控的运维6.1、在从库修改…

ASEMI代理ADAU1979WBCPZ原装ADI车规级ADAU1979WBCPZ

编辑:ll ASEMI代理ADAU1979WBCPZ原装ADI车规级ADAU1979WBCPZ 型号:ADAU1979WBCPZ 品牌:ADI /亚德诺 封装:LFCSP-40 批号:2023 安装类型:表面贴装型 引脚数量:40 类型:车规级…

Linux串口应用编程

在Linux系统中,操作设备的统一接口就是:open/ioctl/read/write。 对于UART,又在ioctl之上封装了很多函数,主要是用来设置行规程。 所以对于UART,编程的套路就是: 使用open函数打开串口设置行规程&#xff…

vue---自定义指令

目录 1、为什么使用自定义指令? 2、自定义指令 3、自定义指令使用 1、为什么使用自定义指令? 什么时候我们需要去自定义一个指令呢? 事件修饰符,很大的程度上我们是为了让我们的代码更加显得是数据驱动的以及可测试的&#x…

姿态识别、手势识别(附代码)

姿态识别技术是一种基于计算机视觉的人体姿态分析方法,可以通过分析人体的姿态,提取出人体的关键点和骨架信息,并对人体的姿态进行建模和识别。随着深度学习技术的发展,近年来姿态识别技术得到了广泛的应用和研究,其中…

React框架的介绍、特点、安装及基本使用流程

一、react介绍 官网:React (docschina.org) react是由facebook前端开发团队开发和维护的js框架 react的实现功能类似VUE,但是由于国外的开发风格,导致在react上,并没有对数据渲染的步骤进行封装,需要开发者更多的使…

【计算几何】点在几何图形中定位问题

一、说明 点的定位属于几何查找,是计算几何中的一个重要的问题。其包括点在三角形内外,多边形内外判断,平面剖分中的位置等。 二、点和几何区域的关系 2.1 点和线的位置关系 两个平行向量的叉乘等于0。如果两个向量的叉乘等于0&#xff0c…

Kali下开启远程管理-ssh

1、使用管理员root修改/etc/ssh/sshd_config 配置文件 ┌──(kali㉿kali)-[~] └─# sudo -i //切换管理root ┌──(root㉿kali)-[~] └─# vim /etc/ssh/sshd_config PermitRootLogin prohibit-password > yes PasswordAuthentication 去掉#号 2、重启ssh.serv…

大数据项目之数仓相关知识

第1章 数据仓库概念 数据仓库(DW): 为企业指定决策,提供数据支持的,帮助企业,改进业务流程,提高产品质量等。 DW的输入数据通常包括:业务数据,用户行为数据和爬虫数据等 ODS: 数据…

基于计算机视觉手势识别控制系统YoLoGesture (利用YOLO实现) 有详细代码+部署+在线服务器尝试+开源可复现

基于计算机视觉手势识别控制系统YoLoGesture (利用YOLO实现) 在线服务器体验网址: https://kedreamix-yologesture.streamlit.app/ 文章目录 基于计算机视觉手势识别控制系统YoLoGesture (利用YOLO实现)1. 项目已完成的部分2. 部分尝试结果3. 项目整体框架3.1. 数据…

如何实现多个窗口同步操作?技术层面?借助工具?

朋友们!你们是否曾经遇到过需要在多个窗口之间进行同步操作的情况?例如,你想在不同的浏览器窗口中同时滚动或者放大缩小网页。如果你有这样的需求,东哥今天就从技术和借助专业工具两方面给大家讲解如何实现对多个相同布局的窗口进…

【C++入门必备知识:|引用| +|auto关键字| + |范围for|】

【C入门必备知识:|引用| |auto关键字| |范围for|】 ①.引用Ⅰ.引用概念Ⅱ.引用使用Ⅲ.引用特性Ⅳ.使用场景1.做函数参数意义: 2.做函数返回值意义: Ⅵ.常引用Ⅶ.引用与指针区别 ②.auto关键字1.使用规则 ③.基于范围的for循环1.使用规则 在这…

如何在你的云服务器/云主机上更新并使用最新版本的python(python3.11)

更新并使用最新版本的python3.11 第一步,登录云服务器,并更新系统包 打开您的终端(Terminal)或使用任意SSH客户端,输入如下命令来登录云主机: ssh 用户名IP地址 在输入密码后,您将成功登录到云…

【软考备战·希赛网每日一练】2023年4月21日

文章目录 一、今日成绩二、错题总结第一题第二题第三题第四题 三、知识查缺 题目及解析来源:2023年04月21日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 第二题 解析: 活动图 是一种特殊的状态图,它展现了在系统…

【谷歌扩展程序入门】简单制作一个查看网页结构的扩展程序

简言 在想看网页结构的时候一般会F12查看元素内容。 太麻烦了 还不简单方便。 扩展程序 扩展建立在诸如 HTML、JavaScript 和 CSS 之类的 Web 技术之上。它们在单独的沙盒执行环境中运行并与 Chrome 浏览器交互。 扩展允许您通过使用 API 修改浏览器行为和访问 Web 内容来“扩…