更新时间:2024-07-24 GMT+08:00

CREATE TABLE创建表

本章节主要介绍ClickHouse创建表的SQL基本语法和使用说明。

基本语法

  • 方法一:在指定的“database_name”数据库中创建一个名为“table_name ”的表。

    如果建表语句中没有包含“database_name”,则默认使用客户端登录时选择的数据库作为数据库名称。

    CREATE TABLE [IF NOT EXISTS] [database_name.]table_name [ON CLUSTER ClickHouse集群名]

    (

    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],

    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],

    ...

    ) ENGINE = engine_name()

    [PARTITION BY expr_list]

    [ORDER BY expr_list]

    ClickHouse在创建表时建议携带PARTITION BY创建表分区。因为ClickHouse数据迁移工具是基于表的分区作数据迁移,在创建表时如果不携带PARTITION BY创建表分区,则在集群内ClickHouseServer节点间数据迁移界面无法对该表进行数据迁移。

  • 方法二:创建一个与database_name2.table_name2具有相同结构的表,同时可以对其指定不同的表引擎声明。

    如果没有表引擎声明,则创建的表将与database_name2.table_name2使用相同的表引擎。

    CREATE TABLE [IF NOT EXISTS] [database_name.]table_name AS [database_name2.]table_name2 [ENGINE = engine_name]

  • 方法三:使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。

    CREATE TABLE [IF NOT EXISTS] [database_name.]table_name ENGINE = engine_name AS SELECT ...

使用示例

--在default数据库和default_cluster集群下创建名为test表
CREATE TABLE default.test ON CLUSTER default_cluster
(
    `EventDate` DateTime, 
    `id` UInt64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test', '{replica}')
PARTITION BY toYYYYMM(EventDate)
ORDER BY id