CREATE TABLE

本文介绍在云数据库ClickHouse中创建表。

创建本地表

语法:

CREATE TABLE [IF NOT EXISTS] [db.]local_table_name ON CLUSTER cluster
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
    INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
    INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = engine_name()
[PARTITION BY expr]
ORDER BY expr
[PRIMARY KEY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...];

参数说明:

参数

说明

db

数据库的名称,默认为当前选择的数据库,本文以default为例。

local_table_name

本地表名。

ON CLUSTER cluster

在每一个节点上都创建一个本地表,固定为ON CLUSTER default

name1,name2

列名。

type1,type2

列类型。

说明

云数据库ClickHouse支持的数据类型,请参见数据类型

ENGINE = engine_name()

表引擎类型。

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

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

  • ReplicatedMergeTree(),等同于ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')

说明

云数据库ClickHouse支持的表引擎类型,请参见表引擎

ORDER BY expr

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

[DEFAULT|MATERIALIZED|ALIAS expr]

默认表达式。

  • DEFAULT:普通的默认表达式。在字段缺省的情况下,自动生成默认值并填充。

  • MATERIALIZED:物化表达式。

  • ALIAS:别名表达式。

GRANULARITY

索引粒度参数。

[PARTITION BY expr]

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

[PRIMARY KEY expr]

主键,默认情况下主键和排序键相同。因此,多数情况下,不需要再专门使用PRIMARY KEY子句指定主键。

[SAMPLE BY expr]

抽样表达式。如果要使用抽样表达式,主键中必须包含此表达式。

[SETTINGS name=value, ...]

影响性能的额外参数。

说明

SETTINGS中支持的参数,请参见SETTINGS配置项

说明

参数ORDER BYGRANULARITYPARTITION BYPRIMARY KEYSAMPLE BY[SETTINGS name=value, ...]只有MergeTree系列表引擎支持。更多参数说明,请参见CREATE TABLE

示例:

CREATE TABLE local_table ON CLUSTER default
(
    Year UInt16,
    Quarter UInt8,
    Month UInt8,
    DayofMonth UInt8,
    DayOfWeek UInt8,
    FlightDate Date,
    FlightNum String,
    Div5WheelsOff String,
    Div5TailNum String
)ENGINE = MergeTree()
 PARTITION BY toYYYYMM(FlightDate)
 PRIMARY KEY (intHash32(FlightDate))
 ORDER BY (intHash32(FlightDate),FlightNum)
 SAMPLE BY intHash32(FlightDate)
SETTINGS index_granularity= 8192;

创建分布式表

分布式表是本地表的集合,它将多个本地表抽象为一张统一的表,对外提供写入、查询功能。当数据写入分布式表时,会被自动分发到集合中的各个本地表中。当查询分布式表时,集合中的各个本地表都会被分别查询,并且把最终结果汇总后返回。您需要先创建本地表,再创建分布式表。

语法:

CREATE TABLE [db.]distributed_table_name ON CLUSTER default
 AS db.local_table_name ENGINE = Distributed(cluster, db, local_table_name [, sharding_key])

参数说明:

参数

说明

db

数据库的名称,默认为当前选择的数据库,本文以default为例。

distributed_table_name

分布式表名。

ON CLUSTER cluster

在每一个节点上都创建一个表,固定为ON CLUSTER default

local_table_name

已创建的本地表名。

sharding_key

分片表达式,用于决定将数据写到哪个分片。

sharding_key可以是一个表达式,例如函数rand(),也可以是一列,例如user_id(Integer类型)。

示例:

CREATE TABLE distributed_table ON CLUSTER default
 AS default.local_table 
ENGINE = Distributed(default, default, local_table, rand());

通过复制表结构创建表

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

语法:

CREATE TABLE [IF NOT EXISTS] [db.]table_name2 ON CLUSTER cluster AS [db.]table_name1 [ENGINE = engine_name];

参数说明:

参数

说明

db

数据库的名称,默认为当前选择的数据库,本文以default为例。

table_name1

被复制表结构的源表,本文以已创建的本地表local_table为例。

table_name2

新创建的表。

ON CLUSTER cluster

在每一个节点上都创建一个表,固定为ON CLUSTER default

[ENGINE = engine_name]

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

说明

云数据库ClickHouse支持的表引擎类型,请参见表引擎

示例:

create table t2 ON CLUSTER default as default.local_table;

创建与查询结果集结构相同的表

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

语法:

CREATE TABLE [IF NOT EXISTS] [db.]s_table_name ON CLUSTER cluster ENGINE = engine_name() AS SELECT ...

参数说明:

参数

说明

db

数据库的名称,默认为当前选择的数据库,本文以default为例。

s_table_name

通过SELECT语句创建的表。

ON CLUSTER cluster

在每一个节点上都创建一个表,固定为ON CLUSTER default

ENGINE = engine_name()

表引擎类型。

说明

云数据库ClickHouse支持的表引擎类型,请参见表引擎

SELECT ...

SELECT子句。

示例:

create table t3 ON CLUSTER default ENGINE =MergeTree() order by Year as select * from default.local_table;

参考文档