本文介紹在云數據庫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, ...];
參數說明:
參數 | 說明 |
| 數據庫的名稱,默認為當前選擇的數據庫,本文以default為例。 |
| 本地表名。 |
| 在每一個節點上都創建一個本地表,固定為 |
| 列名。 |
| 列類型。 說明 云數據庫ClickHouse支持的數據類型,請參見數據類型。 |
| 表引擎類型。 雙副本版集群建表時,需要使用MergeTree系列引擎中支持數據復制的Replicated*引擎,否則副本之間不進行數據復制,導致數據查詢結果不一致。使用該引擎建表時,參數填寫方式如下。
說明 云數據庫ClickHouse支持的表引擎類型,請參見表引擎。 |
| 排序鍵,必填項,可以是一組列的元組或任意表達式。 |
| 默認表達式。
|
| 索引粒度參數。 |
| 分區鍵。一般按照日期分區,也可以使用其他字段或字段表達式。 |
| 主鍵,默認情況下主鍵和排序鍵相同。因此,多數情況下,不需要再專門使用 |
| 抽樣表達式。如果要使用抽樣表達式,主鍵中必須包含此表達式。 |
| 影響性能的額外參數。 說明
|
參數ORDER BY
、GRANULARITY
、PARTITION BY
、PRIMARY KEY
、SAMPLE 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])
參數說明:
參數 | 說明 |
| 數據庫的名稱,默認為當前選擇的數據庫,本文以default為例。 |
| 分布式表名。 |
| 在每一個節點上都創建一個表,固定為 |
| 已創建的本地表名。 |
| 分片表達式,用于決定將數據寫到哪個分片。
|
示例:
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];
參數說明:
參數 | 說明 |
| 數據庫的名稱,默認為當前選擇的數據庫,本文以default為例。 |
| 被復制表結構的源表,本文以已創建的本地表local_table為例。 |
| 新創建的表。 |
| 在每一個節點上都創建一個表,固定為 |
| 表引擎類型。如果沒有指定表引擎,默認與被復制表結構的表相同。 說明 云數據庫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 ...
參數說明:
參數 | 說明 |
| 數據庫的名稱,默認為當前選擇的數據庫,本文以default為例。 |
| 通過SELECT語句創建的表。 |
| 在每一個節點上都創建一個表,固定為 |
| 表引擎類型。 說明 云數據庫ClickHouse支持的表引擎類型,請參見表引擎。 |
|
|
示例:
create table t3 ON CLUSTER default ENGINE =MergeTree() order by Year as select * from default.local_table;
參考文檔
創建表的更多信息,請參見CREATE TABLE。
通過復制表結構創建表的更多信息,請參見With a Schema Similar to Other Table。
通過SELECT語句創建表的更多信息,請參見From SELECT query。