Apache Doris 系列: 基础篇-使用BitMap函数精准去重(2)

news2024/9/22 9:55:16

1. 背景

Apache Doris 原有的BitMap函数虽然比较通用, 但在亿级别的BitMap大基数并交计算性能较差,主要是由以下两个原因造成的:

  • 当BitMap的基数过大,大小超过1GB时,网络或者磁盘的处理时间较长
  • BE节点扫描完数据后传输到一个FE节点进行并交计算,给该FE节点带来压力,成为处理瓶颈

解决方案:将bitmap列的值按照范围划分,不同范围的值存储在不同的bucket上,确保在不同bucket的bitmap值是正交的。在查询的时候,先对不同bucket的bitmap值完成聚合计算,上层的FE节点只需合并聚合过的数据并输出即可。如此会极大的改善计算效率,和解决FE节点成为计算瓶颈的问题。

2. 使用指南

增加一列hid, 表示range的范围,作为hash分桶列

如:

CREATE TABLE ssb.`lineorder_bitmap` (
  `lo_shipmode` varchar(50) NULL COMMENT "user tag",
  `hid` smallint(6) NULL COMMENT "Bucket ID",
  `lo_orderkey` bitmap BITMAP_UNION NULL COMMENT ""
) ENGINE=OLAP
AGGREGATE KEY(`lo_shipmode`, `hid`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`hid`) BUCKETS 3
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"in_memory" = "false",
"storage_format" = "V2",
"disable_auto_compaction" = "false"
);

3. 实际查询效果

3.1 分组去重

select 
lo_shipmode
,orthogonal_bitmap_union_count(lo_orderkey) cnt
from ssb.`lineorder_bitmap` 
group by lo_shipmode

在这里插入图片描述

查询结果与上一篇使用COUNT(DISTINCT)的结果一致。
耗时对比:
COUNT(DISTINCT) : 12秒
bitmap_count(bitmap_union(to_bitmap(lo_orderkey))):6秒
本文使用的orthogonal_bitmap_union_count(lo_orderkey):219毫秒
计算性能得到了极大的提升。

3.2 全量去重

select orthogonal_bitmap_union_count(lo_orderkey) cnt from ssb.`lineorder_bitmap`

COUNT(DISTINCT) : 2.15秒
bitmap_count(bitmap_union(to_bitmap(lo_orderkey))):3.26秒
本文使用的orthogonal_bitmap_union_count(lo_orderkey):141毫秒
同样,计算性能也是得到了极大的提升。

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

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

相关文章

机器自动翻译古文拼音 - 十大宋词 - 念奴娇 赤壁怀古 苏轼

念奴娇 赤壁怀古 苏轼 大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。 遥想公瑾当年,小乔初嫁了&#xf…

机器自动翻译古文拼音 - 十大宋词 - 扬州慢 淮左名都 姜夔

扬州慢淮左名都 南宋姜夔 淮左名都,竹西佳处,解鞍少驻初程。 过春风十里,尽荠麦青青。 自胡马窥江去后,废池乔木,犹厌言兵。 将黄昏,清角吹寒,都在空城。 杜郎俊赏,算而今重到须惊…

springmvc 整合 thymeleaf 模板引擎

springmvc 整合 thymeleaf 模板引擎 第一步&#xff1a;导入 web.xml 文件 -> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-ins…

代码随想录算法训练营第31天 二叉树 java :39. 组合总和 40.组合总和II 131.分割回文串

文章目录LeetCode 39. 组合总和本题题解思路LeetCode 40.组合总和II本题题解思路LeetCode 131.分割回文串本题题解思路那么在代码里什么是切割线呢&#xff1f;那么在代码里什么是切割线呢&#xff1f;总结LeetCode 39. 组合总和 本题题解 思路 根据递归三部曲来分析 递归函…

网站如何进行整站优化?

如果要做优化或者选择性优化&#xff0c;一定要区分关键词优化和全站优化&#xff0c;米贸搜整理如下&#xff0c;希望可以帮助到你&#xff1a;一、全站优化的概念:1.一般认为&#xff0c;全站点优化是指通过SEO技术&#xff0c;使其网站成为搜索引擎中的权威站点。当达到效果…

面试汇总-多线程

目录 1、Thread.sleep(0)的作用 2、Synchronized 2.1、特性 2.2、说一说自己对于 synchronized 关键字的了解&#xff1a; 2.3、synchronized关键字的底层原理(JVM如何实现重量级锁) 2.4、Jdk1.6之后对synchronized做的优化 2.4.1、锁粗化 2.4.2、锁消除 2.5、线程池的…

Scala运算符

算术运算符 关系运算符 Java 和 Scala 中关于“”的区别 逻辑运算符 赋值运算符 位运算符 Scala运算符总结 算术运算符 基本与Java一致 对于除号“/”&#xff0c;它的整数除和小数除是有区别的&#xff1a;整数之间做除法时&#xff0c;只保留整 数部分而舍弃小数部分…

JDBC学习笔记(黑马)

目录 一、JDBC快速入门 二、JDBC API详解 &#xff08;一&#xff09;DriverManager &#xff08;二&#xff09;Connection &#xff08;三&#xff09;Statement &#xff08;四&#xff09;ResultSet &#xff08;五&#xff09;PreparedStatement 三、数据库连接池…

前端实现水印的两种方式(DOM和Canvas)

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…

Python 海象运算符

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人网站&#xff1a;小嗷犬的技术小站 &#x1f34a;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xf…

图纸版本混乱?BOM表管理困难?看SolidWorks PLM如何高效助力产品数据管理

“随着集团的日益壮大&#xff0c;我们越来越重视信息化系统的建设工作&#xff0c;但在研发生产的过程中我们经常会遇到图纸版本混乱、数据查找不便的问题&#xff1b;特别是在产品设计好后&#xff0c;还需要花费很多时间手动整理BOM表&#xff0c;整理期间由于数据量太大&am…

2023年,对人工智能的思考与展望

近些年来&#xff0c;人工智能的话题一次次的冲上热榜&#xff0c;而在前段时间内&#xff0c;chatgpt以及midjourney又一次冲上了热搜&#xff0c;在海内外引起广泛的讨论&#xff0c;我个人在研究了近一个多月的技术文档和文献资料后&#xff0c;也对人工智能的未来有了很多的…

STC32G 单片机通用串行通信接口及其编程

STC32G 系列单片机有4个全双工通用串行通信接口&#xff0c;串口1与串口2既有异步通信功能、又有同步通信功能&#xff0c;串口1与串口2都可进行SPI通信&#xff0c;SPI是一个全双工高速同步串行&#xff1b;通信总线串口3、串口4只有异步通信功能。本文将重点讨论其异步通信&a…

hexo个人博客搭建+butterfly主题配置(雏形版本)

前提&#xff1a; 1. 有一个属于自己的GitHub账号 2. 安装好了git 3. 安装好了node 一、安装hexo 1. 建立一个文件夹 Blog&#xff08;可以自己取名字&#xff09;&#xff0c;进入文件夹标右键打开 Git Bush Here&#xff0c;安装Hexo&#xff1a; npm install -g hexo-…

中智股份冲刺上交所上市:半年收入约87亿元,计划募资37亿元

近日&#xff0c;中智经济技术合作股份有限公司&#xff08;下称“中智股份”&#xff09;预披露招股书&#xff0c;准备在上海证券交易所主板上市&#xff0c;中信证券为其保荐机构。 本次冲刺上市&#xff0c;中智经济计划募资37.42亿元&#xff0c;将用于中智人力资源研发运…

函数的连续性和间断点——“高等数学”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容是高等数学中的函数的连续性和间断点&#xff0c;好的&#xff0c;那现在就让我们进入函数的连续性和间断点的世界吧 一、函数的连续性 1.函数增量 2.连续的定义 3.单侧连续 二、例题&#xff08;函数的连续性&#xff09; …

JDK动态代理CGLIB动态代理

代理模式 是通过代理对象访问目标对象&#xff0c;这样可以在目标对象基础上增强额外的功能&#xff0c;如添加权限&#xff0c;访问控制和审计等功能。 房产中介代替业主卖房 静态代理 静态代理中代理类与被代理类都需要实现同一个接口&#xff0c;这就说明我们的一个静态代…

MFC|Toolbox内控件简单介绍

参考&#xff1a; MFC控件工具箱 &#xff08;https://blog.csdn.net/Hubz131/article/details/77684910&#xff09; 对应工具的超链接是本人搜到认为较易理解的单个控件介绍。 Pointer&#xff1a;就是普通的鼠标&#xff0c;默认状态Button&#xff1a;按钮&#xff0c;用…

stm32f091芯片的学习总结

摘自芯片手册&#xff08;外加自己的思考&#xff09; 发现网上使用这种芯片的人较少或者说解释这种芯片的电路具体怎么画的人较少&#xff0c;本来想直接借鉴的&#xff0c;发现没有找到&#xff0c;于是我自己来写一篇。 一、概述 该芯片提供标准通信接口(两个i2c&#xf…

基于STM32的FreeRTOS开发(2)----Cube工程的FreeRTOS配置

为什么使用Cube进行FreeRTOS配置 STM32Cube是STMicroelectronics提供的一种软件工具&#xff0c;用于配置和生成STM32微控制器的固件。它提供了一个图形化用户界面&#xff0c;可以轻松配置微控制器的各种功能和外设&#xff0c;并生成初始化代码。使用Cube可以大大简化微控制…