上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Doris 入门:高级特性(四)

guduadmin11天前

目录

    • 一、表结构变更
    • 二、Rollup
    • 三、增大内存
    • 四、修改超时时间
    • 五、Broadcast/Shuffle Join
    • 六、数据模型
    • 七、索引
    • 八、物化视图
    • 九、动态分区
    • 十、数据导出
    • 十一、Colocation Join
    • 十二、SQL 函数

      一、表结构变更

      • 添加列: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 分区
                                                                                            • 某些使用场景下,按天进行分区,每天定时执行例行任务,这时需要使用手动管理分区,否则可能由于没有创建分区导致数据导入失败,增加维护成本

                                                                                              十、数据导出

                                                                                              • 概述:以文本格式,通过 Broker 进程导出到远端存储上
                                                                                              • 官方文档:https://doris.apache.org/zh-CN/docs/data-operate/export/export-manual

                                                                                                十一、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 函数

                                                                                                  • 查看函数名:show builtin functions in test_db;
                                                                                                  • 数学函数
                                                                                                    • abs:返回绝对值
                                                                                                    • bin:返回整型的二进制表示
                                                                                                    • ceil(double a)/ceiling(double a)/dceil(double a):返回大于等于该参数的最小整数,向上取整
                                                                                                    • floor:向下取整
                                                                                                    • fmod:取模
                                                                                                    • greatest(bigint a[,bigint b …]):最大值
                                                                                                    • least(bigint a[,bigint b …]):最小值
                                                                                                    • mod:余数
                                                                                                    • negative:符号取反
                                                                                                    • pi:PI 值
                                                                                                    • pow(x,y):x 的 y 次方
                                                                                                    • positive:返回原值
                                                                                                    • rand/random:随机数
                                                                                                    • sign:整数或0 返回 1,负数返回 -1
                                                                                                    • sqrt:返回 a 的平方根
                                                                                                    • 日期函数
                                                                                                      • https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/date-time-functions/convert_tz/
                                                                                                      • 地理位置函数
                                                                                                        • https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/spatial-functions/st_astext
                                                                                                        • 字符串函数
                                                                                                          • https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/string-functions/ascii
                                                                                                          • 聚合函数
                                                                                                            • https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/aggregate-functions/approx_count_distinct
                                                                                                            • Bitmap 函数
                                                                                                              • https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/bitmap-functions/to_bitmap

网友评论

搜索
最新文章
热门文章
热门标签