0


Doris 入门:高级特性(四)

目录

一、表结构变更

  • 添加列:alter table table1 add column uv bigint sum default ‘0’ after pv;
  • 删除列:alter table table1 drop column uv;
  • 查看状态:show alter table column;
  • 取消操作:cancel alter table column from table1;

二、Rollup

  • 概念 - 在 Doris 中,源表称为 Bash 表,在 Base 表之上可以创建多个 Rollup 表,Rollup 表是基于 Base 表产生,在物理上是独立存储- Rollup 最根本的作用就是提高某些查询效率,Rollup 创建完成之后的触发是程序自动的,数据更新与 Base 表完全同步- 在创建 Rollup 无需指定,也不能修改,查询能否命中 Rollup 的必要条件是查询所涉及的所有列都存在 Rollup 的列中
  • 创建 - alter table table2 add rollup rollup_city(citycode,pv);- desc table2;
  • 查看完成状态 - show alter table rollup;
  • 查询执行计划是否命中 - explain select citycode,sum(pv) from table2 group by citycode;- 查看是否有 rollup: rollup_city

三、增大内存

  • Doris 每个用户默认设置内存限制 2g,SHOW VARIABLES LIKE “%mem_limit%” 命令查看
  • 临时修改:SET exec_mem_limit = 123456789;
  • 永久有效:SET GLOBAL exec_mem_limit = 123456789;

四、修改超时时间

  • 查看:show variables like “%query_timeout%”;
  • 临时修改:SET query_timeout = 60;
  • 永久有效:SET global query_timeout = 60;

五、Broadcast/Shuffle Join

  • 概念 - Doris 在 join 操作的时候,默认使用 broadcast 的方式进行 join,即将小表通过广播的方式播到大表所在的节点,形成内存 hash,然后流式读出大表数据进行 hash join- 如果小表数据量也很大的时候,会造成内存溢出,需要通过 shuffle join 的方式进行,也被称为 partition join,即将大表小表都按照 join 的 key 进行 hash,然后进行分布式 join- Broadcast 适合小表和大表 join,Shuffle join 适合大表和大表
  • 使用 Broadcast Join 默认 - select sum(table1.pv) from table1 join table2 where table1.siteid = 1;- 显示指定:select sum(table1.pv) from table1 join [broadcast] table2 where table1.siteid = 1;
  • 使用 Shuffle Join - select sum(table1.pv) from table1 join [shuffle] table2 where table1.siteid = 1;

六、数据模型

  • 概念 - 在 Doris 中,数据以表 Table 的形式进行逻辑上的描述,一张表包括 行 Row 和 列 Column。- Row 是一行数据,Column 是一行数据中的不同字段,Column 可以分为 Key(纬度列)和 Value(指标列)两大类
  • Aggregate 模型- 概念 - 聚合模型的特点就是将表中的列分为 Key 和 Value 两种,Key 就是数据的纬度列,Value 就是数据的指标列,每个指标列还会有自己的聚合函数,数据会根据纬度列进行分组,并对指标列进行聚合- 选择建议 - Aggregate 模型可以通过预聚合,极大降低聚合查询时需要扫描的数据量和查询的计算量,非常适合有固定模式的报表类查询场景- 但是,对 count(*) 很不友好,做其他类型的聚合查询时,需要考虑语意正确性- 聚合方式 - SUM:求和,多行 Value 进行累加- REPLACE:替代,下一批数据的 Value 会替换之前导入过的 Value- MAX:保留最大值- MIN:保留最小值- 触发场景 - 导入、Compaction 合并、查询- 明细数据问题 - 经过聚合之后,Doris 中最终只会存储聚合后的数据,换句话来说,明细数据会丢失,用户不能够再查询到聚合前的明细数据- 要保留明细数据可以添加一个时间戳 timestamp DATETIME 字段,让它的 key 都不相同- 导入数据与已有数据聚合问题 - 先导的数据和新导入的数据之间有相同的适合,也是需要进行一个合并的
  • Uniq 模型- 概念 - 唯一主键模型,本质是聚合模型的 REPLACE 方式、一个特例- 场景 - 适合数据需要保证主键唯一性,没有聚合需求的场景,可以保证主键唯一性约束- 选择建议 - 需要唯一主键约束的场景,但是无法利用 Rollup 等预聚合带来的查询优势
  • Duplicate 模型- 概念 - Duplicate Key 的模型,数据完全按照导入文件中的数据进行存储,不会有任何聚合,即两行数据完全相同,也都会保留- 在建表语句中指定的 DUPLICATE KEY,只是用来指明底层数据按照那些列进行排序- 场景 - 对于有些日志分析不太在意数据多几条或者少几条,可能只关心排序,这时候可能重复 Key 的模型会更加有效果- 适合既没有主键,也没有聚合需求的场景,可以发挥列存模型的优势- 选择建议 - Duplicate 适合任意纬度的 Ad-hoc 查询,虽然不能利用预聚合的特性,但是不受聚合模型的约束,可以发挥列存模型的优势
  • 注意:数据模型在建表的时候已经确定,且无法修改,选择一个合适的数据模型非常重要

七、索引

  • 概念:用于帮助快速过滤或查找数据
  • 分类 - 内建的智能索引,包括前缀索引和 ZoneMap 索引- 用户创建的二级索引,包括 Bloom Filter 索引和 Bitmap 倒排索引
  • Doris 前缀索引 - 概念:在排序的基础上,实现一种根据给定前缀列,快速查询数据的索引方式,将一行数据的前 36个字节 作为这一行数据的前缀索引,遇到 varchar 类型直接截断- 匹配规则 - Doris 的前缀索引应用于 on 和 where,且条件表达式需要是 =,<,>,<=,>=,in,between 逻辑表达式需要是 and- where 举例:第一个条件字段和前缀索引的第一个字段进行比较,如果匹配上,继续往下比较,如果匹配不上,停止比较,后面的字段匹配原理和第一个字段一样- Rollup 调整前缀索引 - 在 Base 表上创建一个 Rollup 表,把字节小的字段放前面,匹配的适合先命中 Rollup 表

八、物化视图

  • 概念:包含了查询结果的数据库对象,在 Doris 中的物化视图,就是查询结果预先存储起来的特殊表
  • 优势 - 对于经常重复使用相同的子查询结果的查询性能大幅提升- Doris 自动更新物化视图的数据,保证 base 表和物化视图的数据一致性,无需额外的维护成本- 查询的适合也可以自动匹配最优的物化视图
  • Rollup 对比 - Rollup 功能通过预聚合方式提升查询效率,但 Rollup 具有一定的局限性,不能基于明细模型做预聚合,物化视图包含了 Rollup 的功能,同时又提供了更多功能,是 Rollup 的一个超集
  • 创建 - CREATE MATERIALIZED VIEW mv_1 AS SELECT a,b,SUM© FROM table GROUP BY a,b;
  • 匹配 - 先判断 where 是否有这个字段,再判断 select 是否有这个字段
  • 其他点 - 操作:支持聚合函数,Drop 删除- 局限性:聚合仅支持单列;删除数据的时候如果条件列不在视图里,需要先删视图;视图过多会影响导入效率;相同列不同聚合函数不能出现在同一视图内;针对 Unique Key 模型只能改变顺序,不能起到聚合功能

九、动态分区

  • 官方文档:https://doris.apache.org/zh-CN/docs/advanced/partition/dynamic-partition
  • 功能 - 对表级别的分区实现生命周期管理,减少使用负担,建表的时候设定动态分区规则,FE 会启动一个后台线程,根据指定的规则创建或删除分区,运行时也可以变更
  • 配置 - fe.conf、MySQL、HTTP
  • 注意 - 动态分区只支持 Range 分区- 某些使用场景下,按天进行分区,每天定时执行例行任务,这时需要使用手动管理分区,否则可能由于没有创建分区导致数据导入失败,增加维护成本

十、数据导出

十一、Colocation Join

  • 概述:为某些 Join 查询提供本地性优化,来减少数据在节点间传输耗时,加速查询
  • 原理:将拥有相同 Colocation Group Schema 的 Table 组成一个 Colocation Group,并保证这些 Table 对应数据分片会落在同一个 BE 节点上,进行 Join 操作时,可以直接进行本地数据 Join
  • 官方文档:https://doris.apache.org/zh-CN/docs/advanced/join-optimization/colocation-join

十二、SQL 函数

标签: 大数据

本文转载自: https://blog.csdn.net/baidu_40468340/article/details/127983570
版权归原作者 AcWare 学习笔记 所有, 如有侵权,请联系我们删除。

“Doris 入门:高级特性(四)”的评论:

还没有评论