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]
参数 |
说明 |
---|---|
database_name |
数据库的名称,默认为当前选择的数据库。 |
table_name |
本地表名。 |
ON CLUSTERClickHouse集群名 |
在每一个节点上都创建一个本地表,固定为ON CLUSTER ClickHouse集群名。 |
name1,name2 |
列名。 |
ENGINE = engine_name() |
表引擎类型。 双副本版集群建表时,需要使用MergeTree系列引擎中支持数据复制的Replicated*引擎,否则副本之间不进行数据复制,导致数据查询结果不一致。使用该引擎建表时,参数填写方式如下。
|
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];
参数 |
说明 |
---|---|
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 ...
参数 |
说明 |
---|---|
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.