Doris内置函数Split_part()性能影响分析测试
硬件配置及版本:
基础配置 | |
---|---|
Doris版本 | 0.15.9 |
BE规模 | 10 |
FE规模 | 3 |
BE节点内存大小 | 125G |
FE节点内存大小 | 256G |
业务表详情:
数据量 | 分区数 | 分桶数 | tablet数量 | 行数 |
---|---|---|---|---|
18.287 GB | 37 | 20 | 685 | 362502093 |
业务SQL:
SELECTdate_format( order_date, '%Y-%m-%d' ) AS order_date,age,address,school,NAME,region,city,temp4
FROMtest.test_tbl
WHEREorder_date >= '2022-09-01' AND order_date <= '2022-11-30' AND split_part ( temp4, '/', 1 ) IN ('Z123','Z456','Z793','Z235','Z923','Z552','Z485','Z210','Z395','Z418','Z344','Z433','Z941','Z080','Z779','Z237','Z648','Z296','Z830','Z022' )
这个是业务原始SQL。可以看到,该SQL是一个简单的单表查询SQL,只在SQL的where
条件中判断temp4
字段时引入了split_part()
函数,但根据目前接口监控分析出来发现,该接口查询耗时基本在3000-4000ms,有时候集群压力大,查询可能耗时至6000-7000ms左右,这个对业务来说肯定是接受不了的。耗时分布如下图:
这个SQL相对简单,目前只能考虑优化表中的数据,我们在数据接入层做了处理,将需要切分判断的数据,提前处理好,在表中冗余一个字段用来做过滤条件,字段temp9
就是temp4
字段提前切分后的值,具体查询SQL如下:
SELECTdate_format( order_date, '%Y-%m-%d' ) AS order_date,age,address,school,NAME,region,city,temp4
FROMtest.test_tbl
WHEREorder_date >= '2022-09-01' AND order_date <= '2022-11-30' AND temp9 IN ('Z123','Z456','Z793','Z235','Z923','Z552','Z485','Z210','Z395','Z418','Z344','Z433','Z941','Z080','Z779','Z237','Z648','Z296','Z830','Z022' )
连续查询5次,查询耗时分布如下:
总结:
从两个查询对比可以看出,对数据做了预处理之后,查询耗时基本分布在150ms左右,是在查询时做切分判断的1/20,查询性能提升了近20倍。因此,如果要在SQL中使用split_part()函数时,可以考虑在ODS接入数据时,提前处理数据,尽量减少该函数使用。
最后:
发现一个Doris 的Bug(这个Bug从0.15 -1.2都有,目前提了issue)
split_part()函数在切分字符串时,如果字符串中没有分隔符,它会返回NULL,这样的结果会导致SQL在过滤数据时,出现少数据情况。
Doris内置函数Split_part()性能影响分析测试相关推荐
- SparkSQL内置函数
使用Spark SQL中的内置函数对数据进行分析,Spark SQL API不同的是,DataFrame中的内置函数操作的结果是返回一个Column对象,而DataFrame天生就是"A d ...
- [云炬python学习笔记]Numpy中内置函数min(),max(),sum()与Python中内置函数min(),max(),sum()性能对比分析
众所周知,Python有许多内置函数(例如min(),max(),sum()),Numpy也有自己的内置函数(np.min(),np.max(),np.sum()).由于Numpy的函数是在编译码中执 ...
- python中reversed是什么意思_Python内置函数reversed()用法分析
这篇文章主要介绍了Python内置函数reversed()用法,结合实例形式分析了reversed()函数的功能及针对序列元素相关操作技巧与使用注意事项,需要的朋友可以参考下 reversed()函数 ...
- 【源码阅读】【苦练基本功】Golang内置函数分析
Golang package builtin 中内置函数我分为两部分介绍,第一部分为基础类型,第二部分为包含函数.接口,较复杂一些 第一部分 // bool is the set of boolean ...
- *【内置】总结持续更新--php常用内置函数
使用思路:根据功能找函数,如 要做个文件管理器的话,首先确定使用和目录/文件相关的函数,画出来html页面看都有什么功能,再一次分析这些功能的实现 常量 手册中的位置:附录->保留字列表-> ...
- MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总)
MATLAB 求函数极值的内置函数一览表 收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅. 文章目录 MATLAB 求函数极值的内置函数一览表 简介 概览 求函数极值(或最大值最小 ...
- python怎么用函数查看变量类型_查看变量类型的Python内置函数是()。
[单选题]下列不属于反射的是( ) [判断题]传统通俗史学有普及型和通俗型 [单选题]当前最流行和最受重视的资料分析是( ). [简答题]什么情况下采用斜视图比较合适? [单选题]下列命题正确的是( ...
- python一些常用函数_【python】常用的一些内置函数
1.cmp cmp(A,B)函数,比较A,B的大小,如果A大于B,返回1,A小于B返回-1,A等于B返回0 print cmp(12,33) >>>-1 print cmp(&quo ...
- python函数type的用意_Python内置函数Type()函数一个有趣的用法
Python内置函数Type()函数一个有趣的用法 今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法. 以前只是知道type可以检测对象类型.然后发现了一个有趣的 ...
最新文章
- AI一分钟 | 特斯拉再融46亿;腾讯AI Lab宣布开源多标签图像数据集
- 那些年,我们见过的 Java 服务端乱象
- matlab的知识点1
- java 泛型 extends 多个
- access2003安装包百度云_阿里云服务器安装JDK与配置环境详细步骤
- 动态规划 0-1背包问题 二维数组
- PostgreSQL版本通过pg_upgrade升级(9.6.21升级到13.2)
- HBase之HRegionServer处理put请求
- DOM 提供了一些滚动页面设置指定可见
- Android 性能测试之方向与框架篇
- 如何正确在NSMutableDictionary中加入一个变量int
- Shell脚本学习指南(一)——入门
- 园林景观设计计算机制图,园林景观设计平面图效果图
- 【微信小程序】实现手机全屏滚动字幕
- 模拟高清和数字高清摄像机的区别,全局快门CMOS 图像传感器,Interline Transfer CCD图像传感器
- 人脑VS机器? AI时代经济决策的机遇与挑战?
- 几则小故事(网上收集)
- 达内php难吗,深圳达内php教学好吗 说说我学习的经历
- 万向节死锁的个人理解
- VUE 学习之parent 选项
热门文章
- OpenGL + Win32 SDK 开发框架的搭建(C语言版)
- Centos7调整home和root大小
- FreeSwitch连接讯时语音网关配置和全部使用场景
- hdu - 1435 Stable Match 稳定婚姻问题、Gale-Shapley算法模板
- 2.8 zio入门——标准ZIO服务
- 【Unity】优化工具Profiler
- MDK keil中在定义一个结构体的时候加点后面不出现结构体当中变量的提示
- jspssh健身房会员卡信息管理系统
- java 获取docker ip_docker容器内部获取宿主机ip地址方法以及报错解决
- 通达信V6.1分时数据文件格式分析