硬件配置及版本:
基础配置
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()性能影响分析测试相关推荐

  1. SparkSQL内置函数

    使用Spark SQL中的内置函数对数据进行分析,Spark SQL API不同的是,DataFrame中的内置函数操作的结果是返回一个Column对象,而DataFrame天生就是"A d ...

  2. [云炬python学习笔记]Numpy中内置函数min(),max(),sum()与Python中内置函数min(),max(),sum()性能对比分析

    众所周知,Python有许多内置函数(例如min(),max(),sum()),Numpy也有自己的内置函数(np.min(),np.max(),np.sum()).由于Numpy的函数是在编译码中执 ...

  3. python中reversed是什么意思_Python内置函数reversed()用法分析

    这篇文章主要介绍了Python内置函数reversed()用法,结合实例形式分析了reversed()函数的功能及针对序列元素相关操作技巧与使用注意事项,需要的朋友可以参考下 reversed()函数 ...

  4. 【源码阅读】【苦练基本功】Golang内置函数分析

    Golang package builtin 中内置函数我分为两部分介绍,第一部分为基础类型,第二部分为包含函数.接口,较复杂一些 第一部分 // bool is the set of boolean ...

  5. *【内置】总结持续更新--php常用内置函数

    使用思路:根据功能找函数,如 要做个文件管理器的话,首先确定使用和目录/文件相关的函数,画出来html页面看都有什么功能,再一次分析这些功能的实现 常量 手册中的位置:附录->保留字列表-> ...

  6. MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总)

    MATLAB 求函数极值的内置函数一览表 收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅. 文章目录 MATLAB 求函数极值的内置函数一览表 简介 概览 求函数极值(或最大值最小 ...

  7. python怎么用函数查看变量类型_查看变量类型的Python内置函数是()。

    [单选题]下列不属于反射的是( ) [判断题]传统通俗史学有普及型和通俗型 [单选题]当前最流行和最受重视的资料分析是( ). [简答题]什么情况下采用斜视图比较合适? [单选题]下列命题正确的是( ...

  8. 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 ...

  9. python函数type的用意_Python内置函数Type()函数一个有趣的用法

    Python内置函数Type()函数一个有趣的用法 今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法. 以前只是知道type可以检测对象类型.然后发现了一个有趣的 ...

最新文章

  1. AI一分钟 | 特斯拉再融46亿;腾讯AI Lab宣布开源多标签图像数据集
  2. 那些年,我们见过的 Java 服务端乱象
  3. matlab的知识点1
  4. java 泛型 extends 多个
  5. access2003安装包百度云_阿里云服务器安装JDK与配置环境详细步骤
  6. 动态规划 0-1背包问题 二维数组
  7. PostgreSQL版本通过pg_upgrade升级(9.6.21升级到13.2)
  8. HBase之HRegionServer处理put请求
  9. DOM 提供了一些滚动页面设置指定可见
  10. Android 性能测试之方向与框架篇
  11. 如何正确在NSMutableDictionary中加入一个变量int
  12. Shell脚本学习指南(一)——入门
  13. 园林景观设计计算机制图,园林景观设计平面图效果图
  14. 【微信小程序】实现手机全屏滚动字幕
  15. 模拟高清和数字高清摄像机的区别,全局快门CMOS 图像传感器,Interline Transfer CCD图像传感器
  16. 人脑VS机器? AI时代经济决策的机遇与挑战?
  17. 几则小故事(网上收集)
  18. 达内php难吗,深圳达内php教学好吗 说说我学习的经历
  19. 万向节死锁的个人理解
  20. VUE 学习之parent 选项

热门文章

  1. OpenGL + Win32 SDK 开发框架的搭建(C语言版)
  2. Centos7调整home和root大小
  3. FreeSwitch连接讯时语音网关配置和全部使用场景
  4. hdu - 1435 Stable Match 稳定婚姻问题、Gale-Shapley算法模板
  5. 2.8 zio入门——标准ZIO服务
  6. 【Unity】优化工具Profiler
  7. MDK keil中在定义一个结构体的时候加点后面不出现结构体当中变量的提示
  8. jspssh健身房会员卡信息管理系统
  9. java 获取docker ip_docker容器内部获取宿主机ip地址方法以及报错解决
  10. 通达信V6.1分时数据文件格式分析