Doris之Schema Change

用户可以通过 Schema Change 操作来修改已存在表的 Schema。目前 Doris 支持以下几种修改:

增加、删除列
修改列类型
调整列顺序
增加、修改 Bloom Filter
增加、删除 bitmap index

原理介绍

执行 Schema Change 的基本过程,是通过原 Index 的数据,生成一份新 Schema 的 Index 的数据。
其中主要需要进行两部分数据转换,
一是已存在的历史数据的转换,
二是在 Schema Change 执行过程中,新到达的导入数据的转换。

在开始转换历史数据之前,Doris 会获取一个最新的 Transaction ID。并等待这个 Transaction ID 之前的所有导入事务完成。这个 Transaction ID 成为分水岭。意思是,Doris 保证在分水岭之后的所有导入任务,都会同时为原 Index 和新 Index 生成数据。这样当历史数据转换完成后,可以保证新的 Index 中的数据是完整的。

注意事项

一张表在同一时间只能有一个 Schema Change 作业在运行。

Schema Change 操作不阻塞导入和查询操作。

分区列和分桶列不能修改。

如果 Schema 中有 REPLACE 方式聚合的 value 列,则不允许删除 Key 列。

如果删除 Key 列,Doris 无法决定 REPLACE 列的取值。

Unique 数据模型表的所有非 Key 列都是 REPLACE 聚合方式。

在新增聚合类型为 SUM 或者 REPLACE 的 value 列时,该列的默认值对历史数据没有含义。

因为历史数据已经失去明细信息,所以默认值的取值并不能实际反映聚合后的取值。

当修改列类型时,除 Type 以外的字段都需要按原列上的信息补全。

如修改列 k1 INT SUM NULL DEFAULT “1” 类型为 BIGINT,则需执行命令如下:

ALTER TABLE tbl1 MODIFY COLUMN k1 BIGINT SUM NULL DEFAULT “1”;

注意,除新的列类型外,如聚合方式,Nullable 属性,以及默认值都要按照原信息补全。

不支持修改列名称、聚合类型、Nullable 属性、默认值以及列注释。

常见问题

Schema Change 的执行速度

目前 Schema Change 执行速度按照最差效率估计约为 10MB/s。保守起见,用户可以根据这个速率来设置作业的超时时间。

提交作业报错 Table xxx is not stable. …

Schema Change 只有在表数据完整且非均衡状态下才可以开始。如果表的某些数据分片副本不完整,或者某些副本正在进行均衡操作,则提交会被拒绝。

数据分片副本是否完整,可以通过以下命令查看:

ADMIN SHOW REPLICA STATUS FROM tbl WHERE STATUS != “OK”;

如果有返回结果,则说明有副本有问题。通常系统会自动修复这些问题,用户也可以通过以下命令优先修复这个表:

ADMIN REPAIR TABLE tbl1;

用户可以通过以下命令查看是否有正在运行的均衡任务:

SHOW PROC “/cluster_balance/pending_tablets”;

可以等待均衡任务完成,或者通过以下命令临时禁止均衡操作:

ADMIN SET FRONTEND CONFIG (“disable_balance” = “true”);

相关配置

FE 配置

alter_table_timeout_second:作业默认超时时间,86400 秒。

BE 配置

alter_tablet_worker_count:在 BE 端用于执行历史数据转换的线程数。默认为 3。如果希望加快 Schema Change 作业的速度,可以适当调大这个参数后重启 BE。但过多的转换线程可能会导致 IO 压力增加,影响其他操作。该线程和 Rollup 作业共用。

Doris之Schema Change相关推荐

  1. AppBoxFuture(四). 随需而变-Online Schema Change

      需求变更是信息化过程中的家常便饭,而在变更过程中如何尽可能小的影响在线业务是比较头疼的事情.举个车联网监控的例子:原终端设备上传车辆的经纬度数据,新的终端设备支持同时上传速度数据,而旧的车辆状态表 ...

  2. Hot Redeploy:schema change not implemented

    Hot Swap failed          Server Debug: schema change not implemented; Server Debug: Operation not su ...

  3. Apache Kylin VS Apache Doris

    作者: 康凯森 日期: 2018-04-17 分类: OLAP 1 系统架构 1.1 What is Kylin 1.2 What is Doris 2 数据模型 2.1 Kylin的聚合模型 2.2 ...

  4. Apache Doris : 一个开源 MPP 数据库的架构与实践

    分享提纲: Doris 背景介绍 适用场景 & 案例介绍 Doris 整体架构 Doris 关键技术 Doris 背景介绍 介绍 Doris 的整体架构,以及 Doris 的一些特性. 一.D ...

  5. Doris之Routine Load

    Routine Load 例行导入(Routine Load)功能为用户提供了一种自动从指定数据源进行数据导入的功能. 本文档主要介绍该功能的实现原理.使用方式以及最佳实践. FE:Frontend, ...

  6. Doris之数据划分(全面)

    数据划分 本文档主要介绍 Doris 的建表和数据划分,以及建表操作中可能遇到的问题和解决方法. 基本概念 在 Doris 中,数据都以表(Table)的形式进行逻辑上的描述. Row & C ...

  7. Doris之BE的所有配置项(全面)

    BE 配置项 该文档主要介绍 BE 的相关配置项. BE 的配置文件 be.conf 通常存放在 BE 部署路径的 conf/ 目录下. 而在 0.14 版本中会引入另一个配置文件 be_custom ...

  8. Doris之磁盘空间管理(重点)

    Doris之磁盘空间管理(重点) 磁盘存储空间有关的系统参数和处理策略. Doris 的数据磁盘空间如果不加以控制,会因磁盘写满而导致进程挂掉.因此我们监测磁盘的使用率和剩余空间,通过设置不同的警戒水 ...

  9. Doris之Rollup的注意事项和常见问题

    Doris之Rollup的注意事项 原理介绍 创建 Rollup 的基本过程,是通过 Base 表的数据,生成一份新的包含指定列的 Rollup 的数据. 其中主要需要进行两部分数据转换, 一是已存在 ...

最新文章

  1. Key-Value数据库:Redis与Memcached之间如何选择?
  2. ArcGis License 启动失败
  3. 凡客即便走小米模式也很难
  4. extjs 限制上传文件类型_如何让extjg 支持选择多文件上传
  5. css知多少(1)——我来问你来答(转)
  6. 设计模式--工厂方法(Factory Method)模式
  7. 登录样式:log4j 2,上下文,自动清理…全部不附带任何字符串!
  8. python lock_python多线程Lock和RLock的区别
  9. established关键字
  10. 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】
  11. sublime 安装 Package Control(笔记)
  12. tc.html是什么页面,HTML iframe属性详细说明
  13. 一定要吃透的四个人性真相
  14. Activity简介
  15. excel密码破解软件Excel Password Unlocker下载和使用技巧(亲测有效!)
  16. 隐秘?混乱?商业化?记者深入总部,探寻OpenAI“拯救世界”背后的真相
  17. [WPF]图片裁切功能(鼠标绘制)
  18. 左岸读书-语不惊人死不休(95)
  19. android x86安装到硬盘不能启动,PC下安装androidx86一些问题的解决方法,gui start
  20. 大数据研究,不能“忽悠”

热门文章

  1. 2.73 交叉编译python_Python这么火,要不要学?听听华为工程师怎么说...
  2. python正则表达式怎么用_python正则表达式的使用
  3. 如何聊才能突出自己软实力,打动面试官
  4. Windows用户程序报错或软件无法删除或者卡顿,解决办法
  5. caffeine java1.7_Caffeine高性能命中率近似最优的Java缓存库
  6. JavaScript高级程序设计(5) 引用类型 (上)
  7. 大白话讲解如何给github上项目贡献代码
  8. 「管理数学基础」3.2 凸分析:凸函数
  9. JAVA操作数据库调试经验
  10. activemq 修改服务端端口61616和控制台端口8161启动