首页 > 其他分享 >doris

doris

时间:2023-11-03 20:24:19浏览次数:35  
标签:聚合 分区 rollup 视图 id sum doris

doris

Partition & Tablet

  • Partition
    逻辑分区往往根据业务通过用户指定的分区列进行范围划分,可以视为逻辑上最小的管理单元,好比导入和删除操作就是partition。
    • list partition
      1652779895992

      • 比较规则:前闭后开

      • 多列分区:分配数据规则,先判断第一个字段然后判断第二个字段,如果前一个数据行的分区字段落在分区临界值则比较后一个字段来判断数据最终落在那个分区。
        eg: 2022-02-01,100的数据如果按月份落库就会落在二月份中,但是如果按照上文判定规则比较第二个字段,落在了一月份的数据中,

        1690098602491

    • range partition
      1652779990050

  • Tablet
    分区内,对用户指定的分桶列进行hash后分桶,每个分桶就是一个数据分片,也是数据划分的最小物理和逻辑单元。数据的移动、复制等操作就是针对tablet。
  • 单分区&复合分区
    • 单分区
      只做hash分布- 只分桶。
    • 复合分区
      第一级:Partition 分区。 当前只支持整型和时间类型。
      第二级:Distribution 分桶。
  • 动态分区
    • 在0.12版本之后新加入的功能,只支持单分区列的range partition。
    • 可建表指定,也可以alter table 指定。
    • 需要参数指定开启。
    • 支持ttl
    • 动态分区和静态分区可以相互转换,但同一时间只可以拥有一种分区状态。

1652870777541

聚合类型

  • 类型分类
    min max sum replace
  • 列的分类
    维度列、指标列
  • 引擎分类
    OLAP(默认)、Mysql、Hive、Broker

数据模型

  • Aggregate
    • 优势:支持min max sum replace,设计表时分为维度列和指标列。
    • 劣势:count(*) 会非常慢,优化建议使用固定sum指标列值为1,逐条累计即可。设计好的聚合类型,二次计算局限性很大,好比金额列你进行了sum操作,后续想要统计cost列的最小值,只能从明细表中统计很慢,这就说明了在设计之初,聚合模型定义的重要性。
    • 会发生聚合的操作
      • 导入
      • Compaction(合并)
      • 查询
  • Uniq
    设计表时指定 uniq key 来约束唯一插入。
  • Duplicate
    数据明细设计表类型,插入的数据都保留。

Rollup

从base表中二次聚合而来,并且在物理上是独立存储的。

  • 获得更粗粒度的聚合结果。

eg: aggregate key: id name age ;score(sum),

默认为group by id name age => sum(score)

如果指定了rollup,我们还可以生成如下聚合的结果:

alter table t_name add rollup roolupname (keys,natures)

rollup(id,name,score):group by id name => sum(score)

rollup(id,score):group by id => sum(score)

使用的时候根据聚合列的聚合类型使用即可:select id,sum(score) from table group by id 就会在之前聚合模型表的基础上使用rollup机制生成新的聚合结果,该统计是否使用了rollup可以使用explain来查看。

  • 调整前缀索引

如果在Duplicate明细表中,对未使用到前缀索引特性的key指定了rollup,建立rollup表(源码中命名为物化索引 ),则会使得指定查询可以使用优化后的前缀索引了。

物化视图

  • 持久化重复经常使用的相同子查询结果
  • Doris自动维护物化视图的数据,无论新的导入或者删除操作都能保证和物化视图表的数据一致性。
  • 查询时,会从base表中分析匹配到最优物化视图。
  • 物化视图 vs rollup
    • rollup不能对Duplicate 明细模型的base表进行预聚合。
    • 物化视图支持更丰富的聚合函数。
    • rollup支持的,视图都支持,视图算是rollup的一个超集。

查询优化

统计去重类的聚合会使用BitMap与HyperLogLog进行优化。

设置参数

  • 查询配置

    show variables like '%exec_mem_limit%'
    
  • 更改配置

    # 当前session 生效
    set exec_mem_limit = 8987988878;
    # 全局永久生效
    set global exec_mem_limit = 8987988878;
    

BroadCast/Shuffle Join

属于join优化,在进行多表join时,会先尝试过滤判断join的各表中是不是存在小表,小表会被广播到各个大表所在的节点上,形成一个内存hash表,然后流式读出大表的数据进行Hash Join(此种join为 BroadCast Join),但是小表如果在其能拿到的内存范围内无法加入到hash内存表中,就会造成内存超限,这时doris会自动切换至Shuffle Join,即将小表和大表的都按照Join的key进行hash,然后进行分布式join,这个对内存的消耗就会分摊到集群的所有计算节点上。

Colocation Join

数据join查询本地化,将拥有一组相同Colocation Group Schema的Table组成一个Colocation Group ,就会保证这些关联表的数据分片落在同一个BE节点上。这样就能保证当相关表进行join时,数据本地化拉取,提升查询效率。

具体实现:在建表时,在properties属性中使用 "colocate_with" = "group name" 指定 colocate group 来约束相关联的表在同一组实现数据本地化拉起。指定的组名没有则创建,有就会加入。移除组属性使用alter table t_name set ("colocate_with" = "") 即可。

标签:聚合,分区,rollup,视图,id,sum,doris
From: https://www.cnblogs.com/tyxy/p/17808336.html

相关文章

  • Doris安装及使用
    Doris简介ApacheDoris是一个基于MPP架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,ApacheDoris能够较好的满足报表分析、即席查询、统一......
  • doris FE启动异常:org.yaml.snakeyaml.representer.Representer: method <init>()V not
    dorisFF启动异常,异常信息如下:  2023-11-0109:53:22,691INFO(main|1)[PaloFe.start():124]PaloFEstarting...2023-11-0109:53:22,699INFO(main|1)[FrontendOptions.analyzePriorityCidrs():107]configuredprior_cidrsvalue:10.252.226.5/242023-11-0109:5......
  • Doris数据库BE——冷热数据方案
    新的冷热数据方案是在整合了存算分离模型的基础上建立的,其核心思路是:DORIS本地存储作为热数据的载体,而外部集群(HDFS、S3等)作为冷数据的载体。数据在导入的过程中,先作为热数据存在,存储于BE节点的本地磁盘上。当数据需要转冷的时候,为该热数据分片创建一个冷数据的副本分片,然后将数据......
  • doris 同一sql查询结果不一致问题
    问题背景数据大屏,展示数据有问题,查看前端指标呈现应用程序表对应指标发现有数据,后端再次测试发现了问题问题描述quota_id指标id,为字符串类型每五分钟会有自动执行脚本将最新账期数据同步到app_kpi_index_data表中对于使用insert插入数据表中的数据,查询数据时会出现以下错误......
  • Doris 知识点
    列映射的目的主要是描述导入文件中各个列的信息,相当于为源数据中的列定义名称。通过描述列映射关系,我们可以将于表中列顺序不同、列数量不同的源文件导入到Doris中。https://doris.apache.org/zh-CN/docs/dev/data-operate/import/import-scenes/load-data-convert/#列映射......
  • Doris简单了解
    ApacheDoris是一个基于MPP架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,ApacheDoris能够较好的满足报表分析、即席查询、统一数仓构建......
  • 40 分钟内同步 500GB MySQL 数据至 Doris
    随着数据分析在业务决策中变得日益重要,数据实时同步和分析成为企业提升竞争力的关键。MySQL作为广泛使用的关系型数据库,其数据存储丰富,但无法满足大规模数据分析和高并发查询的需求。而Doris作为一款专为大数据分析设计的分布式数据仓库,具有高性能、可扩展的特点,其优异的数据处......
  • Doris启动BE时于是遇到的问题
    Doris启动BE时于是遇到的问题java.net.ConnectException:拒绝连接(Connectionrefused)配置文件中ip地址输入错误,导致无法访问,检查后修改即可sudovi/opt/module/apache-doris-0.15.0/be/conf/be.confBE启动后通过Mysql客户端查看状态时,alive=false,获取不到节点情况......
  • Doris启动FE时报错:JAVA_HOME tset
    Doris启动FE时报错:JAVA_HOMEtset问题描述运行代码启动fe时报错./start_fe.sh--daemon错误信息Error:JAVA_HOMEisnotset.问题截图问题分析可能服务器环境里安装了多个jdk解决方案在start_fe.sh中输入以下代码,指定jdk即可exportJAVA_HOME=/data/soft/jdk1.8......
  • 配置Doris时,关闭Linux系统的交换空间
    配置Doris时,关闭Linux系统的交换空间概述交换空间是现代Linux系统中的第二种内存类型。交换空间的主要功能是当全部的RAM被占用并且需要更多内存时,用磁盘空间代替RAM内存。交换空间对虚拟化技术资源损耗较大,成本损耗较高,一般虚拟化技术是不允许开启交换空间的,如果不关闭交......