
# CREATE TABLE
此章节介绍如何创建表。
#### 创建本地表
```
CREATE TABLE [IF NOT EXISTS] [database_name.]table_name [ON CLUSTER default_cluster]
(
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 CLUSTER default_cluster | 在每一个节点上都创建一个本地表，固定为ON CLUSTER *default_cluster。*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 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](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0316.html)。
- 使用数据库。
  ```
  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 default_cluster
 AS [db.]table_name1 [ENGINE = engine_name];
```
表2参数说明 
| 参数                         | 说明                                             |
|:---|:---|
| db                         | 数据库的名称，默认为当前选择的数据库。                            |
| table_name1                | 被复制表结构的源表。                                     |
| table_name2                | 新创建的表。                                         |
| ON CLUSTER default_cluster | 在每一个节点上都创建一个表，固定为ON CLUSTER *default_cluster。* |
| \[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;
  ```
  
- [查看表结构](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0330.html#cloudtable_01_0330__section184671050145915)。
 
#### 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.
  ```
  
 
