1、本地表
sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = engine
在指定的'db'数据库中创建一个名为'name'的表,如果查询中没有包含'db',则默认使用当前选择的数据库作为'db'。
括号中的表结构声明是一个包含一组列描述声明的组合。
ENGIN 为表引擎的声明。如果表引擎是支持索引的,那么可以在表引擎的参数中对其进行说明。
如果指定了IF NOT EXISTS,那么在该表已经存在的情况下,查询不会返回任何错误。在这种情况下,查询几乎不会做任何事情。
示例:
sql
CREATE TABLE db_admin.api_user on cluster cluster_demo (
`id` String,
`name` String
) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity = 8192
2、分布表:
sql
CREATE TABLE db_admin.api_user_all on cluster cluster_demo as db_admin.api_user
ENGINE = Distributed('cluster_demo', 'db_admin', api_user, rand())
3、复制表结构
sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] AS [db2.]name2 [ENGINE = engine]
创建一个与db2.name2具有相同结构的表,同时你可以对其指定不同的表引擎声明。如果没有表引擎声明,则创建的表将与db2.name2使用相同的表引擎。
sql
CREATE TABLE db_admin.role as db_admin.role2
CREATE TABLE db_admin.menu on cluster cluster_demo as db_admin.menu2
4、复制表及数据
sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。
示例:
sql
CREATE TABLE db_admin.role ENGINE = MergeTree ORDER BY id AS select * from db_admin.role