更新时间:2024-11-29 GMT+08:00

ALTER TABLE修改表结构

本章节主要介绍ClickHouse修改表结构的SQL基本语法和使用说明。

基本语法

ALTER TABLE [database_name].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

ALTER仅支持 *MergeTree ,Merge以及Distributed等引擎表。

ALTER操作在副本之间异步执行,若需要修改结果返回策略,修改参数“profiles.default.replication_alter_partitions_sync”为:

  • 0:异步执行
  • 1:等待当前服务器执行完成
  • 2:等待所有副本(如果存在)执行完成

当设置为2时,可修改profiles.default.replication_wait_for_inactive_replica_timeout规定等待的超时时间。

参数设置方法:

登录FusionInsight Manager页面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置”,在右上角搜索框中搜索“replication_alter_partitions_sync”,修改对应的参数值,保存配置。

使用示例

  • 给表t1增加列test01:
    ALTER TABLE t1 ADD COLUMN test01 String DEFAULT 'defaultvalue';
  • 查询修改后的表t1:
    desc t1
    ┌─name────┬─type─┬─default_type─┬─default_expression ┬─comment─┬─codec_expression─┬─ttl_expression─┐
    │  id          │ UInt8  │                │                     │           │                    │                  │  
    │  name        │ String │                │                     │           │                    │                  │ 
    │  address     │ String │                │                     │           │                    │                  │
    │  test01      │ String │  DEFAULT       │  'defaultvalue'     │           │                    │                  │
    └───────┴────┴────────┴────────── ┴───── ┴──────────┴─────────┘
  • 修改表t1列name类型为UInt8:
    ALTER TABLE t1 MODIFY COLUMN name UInt8;
  • 查询修改后的表t1:
    desc t1
    ┌─name────┬─type─┬─default_type─┬─default_expression ┬─comment─┬─codec_expression─┬─ttl_expression─┐
    │  id          │ UInt8  │                │                     │           │                    │                  │  
    │  name        │ UInt8  │                │                     │           │                    │                  │ 
    │  address     │ String │                │                     │           │                    │                  │
    │  test01      │ String │  DEFAULT       │  'defaultvalue'     │           │                    │                  │
    └───────┴────┴────────┴────────── ┴───── ┴──────────┴─────────┘
  • 删除表t1的列test01:
    ALTER TABLE t1 DROP COLUMN test01;
  • 查询修改后的表t1:
    desc t1
    ┌─name────┬─type─┬─default_type─┬─default_expression ┬─comment─┬─codec_expression─┬─ttl_expression─┐
    │  id          │ UInt8  │                │                     │           │                    │                  │  
    │  name        │ UInt8  │                │                     │           │                    │                  │ 
    │  address     │ String │                │                     │           │                    │                  │
    └───────┴────┴────────┴────────── ┴───── ┴──────────┴─────────┘