CREATE TABLE 本页面介绍云数据库ClickHouse提供的本地表与分布式表两种建表方式。 云数据库ClickHouse建表语句基本语法如下: CREATE TABLE [IF NOT EXISTS] [db.]tablename ON CLUSTER cluster ( name1 [type1] [DEFAULTMATERIALIZEDALIAS expr1], name2 [type2] [DEFAULTMATERIALIZEDALIAS expr2], ... INDEX indexname1 expr1 TYPE type1(...) GRANULARITY value1, INDEX indexname2 expr2 TYPE type2(...) GRANULARITY value2 ) ENGINE enginename() [PARTITION BY expr] [ORDER BY expr] [PRIMARY KEY expr] [SAMPLE BY expr] [SETTINGS namevalue, ...]; 选项描述: db:指定数据库名称,如果当前语句没有包含‘db’,则默认使用当前选择的数据库为‘db’。 cluster:指定集群名称,目前固定为default。ON CLUSTER 将在每一个节点上都创建一个本地表。 type:该列数据类型,例如 UInt32。 DEFAULT:该列缺省值。如果INSERT中不包含指定的列,那么将通过表达式计算它的默认值并填充它。 MATERIALIZED:物化列表达式,表示该列不能被INSERT,是被计算出来的; 在INSERT语句中,不需要写入该列;在SELECT 查询语句结果集不包含该列。 ALIAS :别名列。这样的列不会存储在表中。 它的值不能够通过INSERT写入,同时使用SELECT查询星号时,这些列也不会被用来替换星号。 但是它们可以用于SELECT中,在这种情况下,在查询分析中别名将被替换。 物化列与别名列的区别: 物化列是会保存数据,查询的时候不需要计算,而别名列不会保存数据,查询的时候需要计算,查询时候返回表达式的计算结果。 以下选项与表引擎相关,只有MergeTree系列表引擎支持: PARTITION BY:指定分区键。通常按照日期分区,也可以用其他字段或字段表达式。 ORDER BY:指定排序键。可以是一组列的元组或任意的表达式。 PRIMARY KEY: 指定主键,默认情况下主键跟排序键相同。因此,大部分情况下不需要再专门指定一个 PRIMARY KEY 子句。 SAMPLE BY :抽样表达式,如果要用抽样表达式,主键中必须包含这个表达式。 SETTINGS:影响性能的额外参数。 GRANULARITY :索引粒度参数。 示例,创建一个本地表: CREATE TABLE ontimelocal ON CLUSTER default ( Year UInt16, Quarter UInt8, Month UInt8, DayofMonth UInt8, DayOfWeek UInt8, FlightDate Date, FlightNum String, Div5WheelsOff String, Div5TailNum String )ENGINE ReplicatedMergeTree( '/clickhouse/tables/{database}/{table}/{shard}', '{replica}') PARTITION BY toYYYYMM(FlightDate) PRIMARY KEY (intHash32(FlightDate)) ORDER BY (intHash32(FlightDate),FlightNum) SAMPLE BY intHash32(FlightDate) SETTINGS indexgranularity 8192 ; 说明 高可用集群(双副本),要用ReplicatedMergeTree等Replicated系列引擎,否则副本之间不进行数据复制,导致数据查询结果不一致。ReplicatedMergeTree创建的时只支持以下两种方式填写参数: ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}') ,参数中的字符不允许修改。 ReplicatedMergeTree(),参数会自动默认填成和方式1一样。