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

CREATE TABLE

此章节介绍如何创建表。

创建本地表

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]
表1 参数说明

参数

说明

database_name

数据库的名称,默认为当前选择的数据库。

table_name

本地表名。

ON CLUSTERClickHouse集群名

在每一个节点上都创建一个本地表,固定为ON CLUSTER ClickHouse集群名

name1,name2

列名。

ENGINE = engine_name()

表引擎类型。

双副本版集群建表时,需要使用MergeTree系列引擎中支持数据复制的Replicated*引擎,否则副本之间不进行数据复制,导致数据查询结果不一致。使用该引擎建表时,参数填写方式如下。

  • ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}'),固定配置,无需修改。
  • ReplicatedMergeTree(),等同于ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')。

ORDER BY expr_list

排序键,必填项,可以是一组列的元组或任意表达式。

[PARTITION BY expr_list]

分区键。一般按照日期分区,也可以使用其他字段或字段表达式。

示例:

  • 创建数据库。请参见CREATE DATABASE
  • 使用数据库。
    use demo;
  • 创建名为demo.test表。
    CREATE TABLE demo.test ON CLUSTER default_cluster(`EventDate` DateTime, `id` UInt64)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY id;

复制表结构创建表

可以通过复制表结构创建与源表具有相同结构的表。语法:

CREATE TABLE [IF NOT EXISTS] [db.]table_name2 ON CLUSTER ClickHouse集群名
 AS [db.]table_name1 [ENGINE = engine_name];
表2 参数说明

参数

说明

db

数据库的名称,默认为当前选择的数据库。

table_name1

被复制表结构的源表。

table_name2

新创建的表。

ON CLUSTER ClickHouse集群名

在每一个节点上都创建一个表,固定为ON CLUSTER ClickHouse集群名

[ENGINE = engine_name]

表引擎类型。如果没有指定表引擎,默认与被复制表结构的表相同。

示例:

  • 创建数据库。
    create database demo;
  • 使用数据库。
    use demo;
  • 创建数据表。
    create table demo_t(uid Int32,name String,age UInt32,gender String)engine = TinyLog;
  • 复制表结构。
    create table demo_t2 as demo_t;
  • 查看表结构

SELECT语句创建

使用指定的表引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果进行填充。

CREATE TABLE [IF NOT EXISTS] [database_name.]table_name ENGINE = engine_name AS SELECT ...
表3 参数说明

参数

说明

database_name

数据库的名称,默认为当前选择的数据库。

table_name

通过SELECT语句创建的表。

ENGINE = engine_name()

表的引擎类型。

SELECT ...

SELECT子句。

示例:

  • 创建表。
    CREATE TABLE default.demo1 ON CLUSTER default_cluster( `EventDate` DateTime, `id` UInt64)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/demo1', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY id;
  • 通过SELECT语句创建表。
    create table t3 ON CLUSTER default_cluster ENGINE =MergeTree() order by EventDate as select * from default.demo1;
  • 查询demo1和t3表结构。
    desc demo1;

    查询结果显示,两张表结构一样。

    cloudtable-wlr-click-20230730-06-server-1-1 :) desc demo1;
    DESCRIBE TABLE demo1
    Query id: 712f6b91-668d-4f70-b160-aac8e52f63a4
    ┌─name──────┬─type─────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
    │ EventDate │ DateTime │              │                    │         │                  │                │
    │ id        │ UInt64   │              │                    │         │                  │                │
    └───────────┴──────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
    2 rows in set. Elapsed: 0.001 sec.
    cloudtable-wlr-click-20230730-06-server-1-1 :) desc t3;
    DESCRIBE TABLE t3
    Query id: 11b67532-26f0-49c5-b36d-439d45c279bf
    ┌─name──────┬─type─────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
    │ EventDate │ DateTime │              │                    │         │                  │                │
    │ id        │ UInt64   │              │                    │         │                  │                │
    └───────────┴──────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
    2 rows in set. Elapsed: 0.001 sec.