返回介绍

下载

编译与部署

开始使用

操作手册

最佳实践

扩展功能

设计文档

SQL 手册

开发者手册

Apache 社区

Segment V2 升级手册

发布于 2021-09-30 01:42:43 字数 13384 浏览 835 评论 0 收藏 0

背景

Doris 0.12 版本中实现了新的存储格式:Segment V2,引入词典压缩、bitmap索引、page cache等优化,能够提升系统性能。

0.12 版本会同时支持读写原有的 Segment V1(以下简称V1) 和新的 Segment V2(以下简称V2) 两种格式。如果原有数据想使用 V2 相关特性,需通过命令将 V1 转换成 V2 格式。

本文档主要介绍从 0.11 版本升级至 0.12 版本后,如何转换和使用 V2 格式。

V2 格式的表可以支持以下新的特性:

  1. bitmap 索引
  2. 内存表
  3. page cache
  4. 字典压缩
  5. 延迟物化(Lazy Materialization)

从 0.13 版本开始,新建表的默认存储格式将为 Segment V2

集群升级

0.12 版本仅支持从 0.11 版本升级,不支持从 0.11 之前的版本升级。请先确保升级的前的 Doris 集群版本为 0.11。

0.12 版本有两个 V2 相关的重要参数:

  • default_rowset_type:FE 一个全局变量(Global Variable)设置,默认为 "alpha",即 V1 版本。
  • default_rowset_type:BE 的一个配置项,默认为 "ALPHA",即 V1 版本。

保持上述配置默认的话,按常规步骤对集群升级后,原有集群数据的存储格式不会变更,即依然为 V1 格式。如果对 V2 格式没有需求,则继续正常使用集群即可,无需做任何额外操作。所有原有数据、以及新导入的数据,都依然是 V1 版本。

V2 格式转换

已有表数据转换成 V2

对于已有表数据的格式转换,Doris 提供两种方式:

  1. 创建一个 V2 格式的特殊 Rollup

    该方式会针对指定表,创建一个 V2 格式的特殊 Rollup。创建完成后,新的 V2 格式的 Rollup 会和原有表格式数据并存。用户可以指定对 V2 格式的 Rollup 进行查询验证。

    该方式主要用于对 V2 格式的验证,因为不会修改原有表数据,因此可以安全的进行 V2 格式的数据验证,而不用担心表数据因格式转换而损坏。通常先使用这个方式对数据进行校验,之后再使用方法2对整个表进行数据格式转换。

    操作步骤如下:

     ## 创建 V2 格式的 Rollup
    
     ALTER TABLE table_name ADD ROLLUP table_name (columns) PROPERTIES ("storage_format" = "v2");
    

    其中, Rollup 的名称必须为表名。columns 字段可以任意填写,系统不会检查该字段的合法性。该语句会自动生成一个名为 __V2_table_name 的 Rollup,并且该 Rollup 列包含表的全部列。

    通过以下语句查看创建进度:

     SHOW ALTER TABLE ROLLUP;
    

    创建完成后,可以通过 DESC table_name ALL; 查看到名为 __v2_table_name 的 Rollup。

    之后,通过如下命令,切换到 V2 格式查询:

     set use_v2_rollup = true;
     select * from table_name limit 10;
    

    use_V2_Rollup 这个变量会强制查询名为 __V2_table_name 的 Rollup,并且不会考虑其他 Rollup 的命中条件。所以该参数仅用于对 V2 格式数据进行验证。

  2. 转换现有表数据格式

    该方式相当于给指定的表发送一个 schema change 作业,作业完成后,表的所有数据会被转换成 V2 格式。该方法不会保留原有 v1 格式,所以请先使用方法1进行格式验证。

     ALTER TABLE table_name SET ("storage_format" = "v2");
    

    之后通过如下命令查看作业进度:

     SHOW ALTER TABLE COLUMN;
    

    作业完成后,该表的所有数据(包括Rollup)都转换为了 V2。且 V1 版本的数据已被删除。如果该表是分区表,则之后创建的分区也都是 V2 格式。

    V2 格式的表不能重新转换为 V1

创建新的 V2 格式的表

在不改变默认配置参数的情况下,用户可以创建 V2 格式的表:

CREATE TABLE tbl_name
(
    k1 INT,
    k2 INT
)
DISTRIBUTED BY HASH(k1) BUCKETS 1
PROPERTIES
(
    "storage_format" = "v2"
);

properties 中指定 "storage_format" = "v2" 后,该表将使用 V2 格式创建。如果是分区表,则之后创建的分区也都是 V2 格式。

全量格式转换(试验功能,不推荐)

通过以下方式可以开启整个集群的全量数据格式转换(V1 -> V2)。全量数据转换是通过 BE 后台的数据 compaction 过程异步进行的。 该功能目前并没有很好的方式查看或控制转换进度,并且无法保证数据能够转换完成。可能导致同一张表长期处于同时包含两种数据格式的状态。因此建议使用 ALTER TABLE 针对性的转换。

  1. 从 BE 开启全量格式转换

    be.conf 中添加变量 default_rowset_type=BETA 并重启 BE 节点。在之后的 compaction 流程中,数据会自动从 V1 转换成 V2。

  2. 从 FE 开启全量格式转换

    通过 mysql 客户端连接 Doris 后,执行如下语句:

    SET GLOBAL default_rowset_type = beta;

    执行完成后,FE 会通过心跳将信息发送给 BE,之后 BE 的 compaction 流程中,数据会自动从 V1 转换成 V2。

    FE 的配置参数优先级高于 BE 的配置。即使 BE 中的配置 default_rowset_type 为 ALPHA,如果 FE 配置为 beta 后,则 BE 依然开始进行 V1 到 V2 的数据格式转换。

    建议先通过对单独表的数据格式转换验证后,再进行全量转换。全量转换的时间比较长,且进度依赖于 compaction 的进度。可能出现 compaction 无法完成的情况,因此需要通过显式的执行 ALTER TABLE 操作进行个别表的数据格式转换。

  3. 查看全量转换进度

    全量转换进度须通过脚本查看。脚本位置为代码库的 tools/show_segment_status/ 目录。请参阅其中的 README 文档查看使用帮助。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文