Doris--修改表和删除表

本文详细介绍了ApacheDoris中如何使用ALTERTABLE命令进行表结构修改,包括重命名、分区操作、rollup索引创建与删除,以及如何通过DELETEFROM和DROPPARTITION语句删除数据。特别强调了分区删除的高效性和删除操作的注意事项。
摘要由CSDN通过智能技术生成

一、修改表

  • 使用ALTER TABLE命令可以对表进行修改,包括 partition 、rollup、schema change、rename 和 index 五种。语法:
ALTER TABLE [database.]table 
alter_clause1[, alter_clause2, ...];
 
alter_clause 分为 partition 、rollup、schema change、renameindex 五种。

1.1 rename



1)将名为 table1 的表修改为 table2
alter table table1 rename table2;

2)将表 example_table 中名为 rollup1 的 rollup index 修改为 rollup2 
alter table example_table rename rollup rollup1 rollup2; 

3)将表 example_table 中名为 p1 的 partition 修改为 p2
alter table example_table rename partition p1 p2;

1.2 partition


1)增加分区, 使用默认分桶方式
现有分区 [min, 2013-01-01),增加分区 [2013-01-01, 2014-01-01)alter table example_db.my_table
add partition p1 values less than ("2014-01-01");
 
2)增加分区,使用新的分桶数
alter table example_db.my_table
add partition p1 values less than ("2015-01-01") distributed by hash(k1) buckets 20;
 
3)增加分区,使用新的副本数
alter table example_db.my_table
add partition p1 values less than ("2015-01-01") ("replication_num"="1");

4)修改分区副本数
alter table example_db.my_table
modify partition p1 set("replication_num"="1");
 
5)批量修改指定分区
alter table example_db.my_table
modify partition (p1, p2, p4) set("in_memory"="true");
 
6)批量修改所有分区
alter table example_db.my_table
modify partition (*) set("storage_medium"="hdd");
 
7)删除分区
alter table example_db.my_table drop partition p1;
 
8)增加一个指定上下界的分区
alter table example_db.my_table
add partition p1 values [("2014-01-01"), ("2014-02-01"));
 

1.3 rollup



1)创建 index: example_rollup_index,基于 base index(k1,k2,k3,v1,v2)。列式存储。
alter table example_db.my_table
add rollup example_rollup_index(k1, k3, v1, v2);
 
2)创建 index: example_rollup_index2,基于 example_rollup_index(k1,k3,v1,v2)
alter table example_db.my_table
add rollup example_rollup_index2 (k1, v1) from example_rollup_index;
 
3)创建 index: example_rollup_index3, 基于 base index (k1,k2,k3,v1), 自定义 rollup 超时时间一小时。
alter table example_db.my_table
add rollup example_rollup_index(k1, k3, v1) properties("timeout" = "3600");
 
4)删除 index: example_rollup_index2
alter table example_db.my_table drop rollup example_rollup_index2;
 

1.4 表结构变更

  • 使用 ALTER TABLE 命令可以修改表的 Schema,包括如下修改:
    • 增加列
    • 删除列
    • 修改列类型
    • 改变列顺序
以增加列为例:
1)我们新增一列 uv,类型为 bigint,聚合类型为 sum,默认值为 0:
alter table table1 add column uv bigint sum default '0' after pv; 

2)提交成功后,可以通过以下命令查看作业进度:
show alter table column;
当作业状态为 finished,则表示作业完成。新的 schema 已生效。

3)查看新的 schema
desc table1; 

4)可以使用以下命令取消当前正在执行的作业: 
cancel alter table rollup from table1; 



5)更多可以参阅: help alter table
https://doris.apache.org/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-COLUMN

二、删除表

  • doris 目前可以通过两种方式删除数据:DELETE FROM 语句和 ALTER TABLE DROP PARTITION 语句。

2.1 DELETE FROM Statement(条件删除)

  • delete from 语句类似标准 delete 语法,具体使用可以查看 help delete; 帮助。
  • 语法:
DELETE FROM table_name [PARTITION partition_name] 
WHERE column_name1 op { value | value_list } [ AND column_name2 op { value | value_list } ...];
  • 如:
delete from student_kafka where id=1;
  • 注意事项。
    • (1)该语句只能针对 Partition 级别进行删除。如果一个表有多个 partition 含有需要删除的数据,则需要执行多次针对不同 Partition 的 delete 语句。而如果是没有使用 Partition 的表,partition 的名称即表名。
    • (2)where 后面的条件谓词只能针对 Key 列,并且谓词之间,只能通过 AND 连接。 如果想实现 OR 的语义,需要执行多条 delete。
    • (3)delete 是一个同步命令,命令返回即表示执行成功。
    • (4)从代码实现角度,delete 是一种特殊的导入操作。该命令所导入的内容,也是一 个新的数据版本,只是该版本中只包含命令中指定的删除条件。在实际执行查询时,会根据 这些条件进行查询时过滤。所以,不建议大量频繁使用 delete 命令,因为这可能导致查询 效率降低。
    • (5)数据的真正删除是在 BE 进行数据 Compaction 时进行的。所以执行完 delete 命 令后,并不会立即释放磁盘空间。
    • (6)delete 命令一个较强的限制条件是,在执行该命令时,对应的表,不能有正在进 行的导入任务(包括 PENDING、ETL、LOADING)。而如果有 QUORUM_FINISHED 状 态的导入任务,则可能可以执行。
    • (7)delete 也有一个隐含的类似 QUORUM_FINISHED 的状态。即如果 delete 只在多 数副本上完成了,也会返回用户成功。但是会在后台生成一个异步的 delete job(Async Delete Job),来继续完成对剩余副本的删除操作。如果此时通过 show delete 命令,可以看到这种 任务在 state 一栏会显示 QUORUM_FINISHED。

2.2 DROP PARTITION Statement(删除分区)

  • 该命令可以直接删除指定的分区。因为 Partition 是逻辑上最小的数据管理单元,所以使 用 DROP PARTITION 命令可以很轻量的完成数据删除工作。并且该命令不受 load 以及任 何其他操作的限制,同时不会影响查询效率。是比较推荐的一种数据删除方式。
  • 该命令是同步命令,执行成功即生效。而后台数据真正删除的时间可能会延迟 10 分钟左右。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值