CREATE TABLE
更新(xin)時間 2023-12-20 18:53:48
最近更新時間: 2023-12-20 18:53:48
分(fen)享文章
本頁面介紹云數(shu)據庫ClickHouse提(ti)供(gong)的本地表與(yu)分布式(shi)表兩(liang)種(zhong)建表方式(shi)。
云數據庫ClickHouse建表語句基本語法如下:
CREATE TABLE [IF NOT EXISTS] [db.]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, ...];
選項描述:
- db:指定數據庫名稱,如果當前語句沒有包含‘db’,則默認使用當前選擇的數據庫為‘db’。
- cluster:指定集群名稱,目前固定為default。ON CLUSTER 將在每一個節點上都創建一個本地表。
- type:該列數據類型,例如 UInt32。
- DEFAULT:該列缺省值。如果INSERT中不包含指定的列,那么將通過表達式計算它的默認值并填充它。
- MATERIALIZED:物化列表達式,表示該列不能被INSERT,是被計算出來的; 在INSERT語句中,不需要寫入該列;在SELECT *查詢語句結果集不包含該列。
- ALIAS :別名列。這樣的列不會存儲在表中。 它的值不能夠通過INSERT寫入,同時使用SELECT查詢星號時,這些列也不會被用來替換星號。 但是它們可以用于SELECT中,在這種情況下,在查詢分析中別名將被替換。
- 物化列與別名列的區別: 物化列是會保存數據,查詢的時候不需要計算,而別名列不會保存數據,查詢的時候需要計算,查詢時候返回表達式的計算結果。
以下選(xuan)項與表(biao)引擎(qing)相關,只有MergeTree系(xi)列表(biao)引擎(qing)支持(chi):
- PARTITION BY:指定分區鍵。通常按照日期分區,也可以用其他字段或字段表達式。
- ORDER BY:指定排序鍵。可以是一組列的元組或任意的表達式。
- PRIMARY KEY: 指定主鍵,默認情況下主鍵跟排序鍵相同。因此,大部分情況下不需要再專門指定一個 PRIMARY KEY 子句。
- SAMPLE BY :抽樣表達式,如果要用抽樣表達式,主鍵中必須包含這個表達式。
- SETTINGS:影響性能的額外參數。
- GRANULARITY :索引粒度參數。
示(shi)例(li),創建一個本地表:
CREATE TABLE ontime_local 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 index_granularity= 8192 ;
說明高可用集群(雙副本),要用ReplicatedMergeTree等Replicated系列引擎,否則副本之間不進行數據復制,導致數據查詢結果不一致。ReplicatedMergeTree創建的時只支持以下兩種方式填寫參數:
ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}',?'{replica}')?,參數中(zhong)的字符不允許(xu)修改。
ReplicatedMergeTree(),參數會自動默(mo)認填成(cheng)和方式1一樣。