Apache Doris 基础 -- 数据表设计(模式更改)

用户可以通过schema Change操作修改现有表的模式。表的模式主要包括对列的修改和对索引的修改。这里我们主要介绍与列相关的Scheme更改。对于与索引相关的更改,可以查看数据表设计/表索引,查看每个索引的更改方法。

1、术语

  • 基本表(Base Table):创建每个表时,它对应于一个基表。
  • Rollup:基于基表或其他上Rollup创建的上Rollup表。
  • Index: 物化索引(materialized index)。汇总(Rollup )表或基表都称为物化索引。
  • Transaction:每个导入任务都是一个事务,每个事务都有一个惟一的递增事务ID。

2、介绍

Light Schema Change

在介绍之前,有必要了解Apache Doris 1.2.0版本之前的三个Schema Change实现,它们都是异步的:

  • 硬链接模式更改Hard Linked Schema Change) 主要对值列进行加减操作,不需要修改数据文件。
  • 直接模式更改Direct Schema Change)主要用于更改值列的类型,需要重写数据,但不涉及键列,也不需要重新排序。
  • 排序模式更改Sort schema change )主要用于键列模式更改,因为键列加/减/修改类型等操作会影响现有数据的排序,所以需要将数据再次读出,修改,然后排序。

自Apache Doris 1.2.0以来,对于第一种类型,已经引入了轻量级模式更改(light schema change)的新特性。新的轻型模式更改允许在毫秒内完成值列的加减。从Apache Doris 2.0.0开始,默认情况下,所有新创建的表都支持轻模式更改

除了添加和删除value列之外,其他类型的模式更改的主要原则如下
执行模式更改的基本过程是从原始表/Index数据中的数据/Index生成新的模式表。数据转换主要有两部分,一部分是对已有历史数据的转换,另一部分是对执行模式更改时新导入的数据进行转换。

+----------+
| Load Job |
+----+-----+
     |
     | Load job generates both origin and new Index data
     |
     |      +------------------+ +---------------+
     |      | Origin Index     | | Origin Index  |
     +------> New Incoming Data| | History Data  |
     |      +------------------+ +------+--------+
     |                                  |
     |                                  | Convert history data
     |                                  |
     |      +------------------+ +------v--------+
     |      | New Index        | | New Index     |
     +------> New Incoming Data| | History Data  |
            +------------------+ +---------------+

在开始转换历史数据之前,Doris将获取一个最新的事务ID,并等待该事务ID完成之前的所有导入事务。这个事务ID成为一个分水岭。这意味着Doris确保分水岭之后的所有导入任务将同时为原始表/索引和新表/索引生成数据。这样,当历史数据转换完成后,就可以保证新表中的数据是完整的。

创建模式更改的特定语法可以在帮助ALTER TABLE COLUMN的模式更改部分中找到。

3、将位于指定位置的列添加到指定索引

ALTER TABLE table_name ADD COLUMN column_name column_type [KEY | agg_type] [DEFAULT "default_value"]
[AFTER column_name|FIRST]
[TO rollup_index_name]
[PROPERTIES ("key"="value", ...)]
  • 对于aggregate 模型,如果添加值列,则指定agg_type
  • 对于非聚合模型(例如,DUPLICATE KEY),如果添加键列,请指定KEY关键字。
  • 不能在 Rollup Index 中增加 Base Index 中已经存在的列(如有需要,可以重新创建一个 Rollup Index)。

Examples

  1. example_rollup_indexcol1
### 关于 Apache Doris 的介绍 Apache Doris 是一个现代化的分布式 SQL 数据库,专为实时分析而设计。该数据库支持多维在线分析处理(OLAP),能够快速执行复杂的查询操作并返回结果。其架构旨在提供高吞吐量的同时保持低延迟特性,在大规模数据集上的表现尤为突出[^1]。 #### 主要特点 - **高性能**:通过向量化执行引擎以及先进的索引技术来加速读取性能; - **易用性**:兼容 MySQL 协议,允许用户利用现有的 BI 工具轻松连接至系统; - **灵活性**:不仅适合传统的报表应用,也适用于交互式探索和即席查询等场景; - **扩展性强**:水平伸缩能力使得集群可以根据业务需求动态调整规模; ### 使用教程概览 为了帮助初次接触此系统的开发者更好地理解和掌握如何部署与管理 Apache Doris 实例,下面给出了一套简化版的操作指南: #### 准备工作环境 确保目标机器已安装 Docker 及相关依赖项之后,可以从官方镜像拉取最新版本的软件包,并启动容器实例[^2]: ```bash docker pull apachedoris/doris:latest docker run -d --name doris_fe -p 8030:8030 -e DORIS Fe.META_DIR=/var/lib/doris/meta apachedoris/doris frontend ``` 上述命令创建了一个名为 `doris_fe` 的前端节点服务进程,监听本地端口 8030 提供 Web UI 访问接口。 #### 初始化配置文件 进入刚刚建立好的容器内部修改必要的参数设置以适应特定的工作负载模式: ```bash docker exec -it doris_fe bash cd /path/to/conf/ vi fe.conf ``` 编辑完成后保存更改退出编辑器即可生效新的设定值。 #### 创建表结构定义语句 接下来编写用于描述待导入关系型表格元信息的 SQL 脚本片段如下所示: ```sql CREATE TABLE IF NOT EXISTS sales ( order_id BIGINT, product_name STRING, quantity INT, price DECIMAL(9, 2), sale_date DATE ) ENGINE=OLAP DUPLICATE KEY(order_id) DISTRIBUTED BY HASH(order_id) BUCKETS 10; ``` 这段代码声明了一个简单的销售记录集合模型,其中包含了订单编号、商品名称等多个字段属性。 #### 导入外部数据源 当完成前面几步准备工作以后就可以着手准备实际的数据加载流程了。这里假设有一个 CSV 文件位于主机目录下等待被批量插入到刚才新建的目标表内: ```bash LOAD LABEL example_db.label_1 ( DATA INFILE ("file:///host/path/sales.csv") INTO TABLE sales COLUMNS TERMINATED BY "," (order_id, product_name, quantity, price, sale_date) ); ``` 以上就是有关 Apache Doris 基础入门的一些指导说明,希望能够为广大用户提供有价值的参考资料和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值