全部產品
Search
文件中心

ApsaraDB for ClickHouse:CREATE TABLE

更新時間:Jun 30, 2024

本文介紹在雲資料庫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, ...];

參數說明:

參數

說明

db

資料庫的名稱,預設為當前選擇的資料庫,本文以default為例。

local_table_name

本地表名。

ON CLUSTER cluster

在每一個節點上都建立一個本地表,固定為ON CLUSTER default

name1,name2

列名。

type1,type2

列類型。

說明

雲資料庫ClickHouse支援的資料類型,請參見資料類型

ENGINE = engine_name()

表引擎類型。

雙副本版叢集建表時,需要使用MergeTree系列引擎中支援資料複製的Replicated*引擎,否則副本之間不進行資料複製,導致資料查詢結果不一致。使用該引擎建表時,參數填寫方式如下。

  • ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}'),固定配置,無需修改。

  • ReplicatedMergeTree(),等同於ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')

說明

雲資料庫ClickHouse支援的表引擎類型,請參見表引擎

ORDER BY expr

排序鍵,必填項,可以是一組列的元組或任意運算式。

[DEFAULT|MATERIALIZED|ALIAS expr]

預設運算式。

  • DEFAULT:普通的預設運算式。在欄位預設的情況下,自動產生預設值並填充。

  • MATERIALIZED:物化運算式。

  • ALIAS:別名運算式。

GRANULARITY

索引粒度參數。

[PARTITION BY expr]

分區鍵。一般按照日期分區,也可以使用其他欄位或欄位運算式。

[PRIMARY KEY expr]

主鍵,預設情況下主鍵和排序鍵相同。因此,多數情況下,不需要再專門使用PRIMARY KEY子句指定主鍵。

[SAMPLE BY expr]

抽樣運算式。如果要使用抽樣運算式,主鍵中必須包含此運算式。

[SETTINGS name=value, ...]

影響效能的額外參數。

說明

SETTINGS中支援的參數,請參見SETTINGS配置項

說明

參數ORDER BYGRANULARITYPARTITION BYPRIMARY KEYSAMPLE 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])

參數說明:

參數

說明

db

資料庫的名稱,預設為當前選擇的資料庫,本文以default為例。

distributed_table_name

分布式表名。

ON CLUSTER cluster

在每一個節點上都建立一個表,固定為ON CLUSTER default

local_table_name

已建立的本地表名。

sharding_key

分區運算式,用於決定將資料寫到哪個分區。

sharding_key可以是一個運算式,例如函數rand(),也可以是一列,例如user_id(Integer類型)。

樣本:

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];

參數說明:

參數

說明

db

資料庫的名稱,預設為當前選擇的資料庫,本文以default為例。

table_name1

被複製表結構的源表,本文以已建立的本地表local_table為例。

table_name2

新建立的表。

ON CLUSTER cluster

在每一個節點上都建立一個表,固定為ON CLUSTER default

[ENGINE = engine_name]

表引擎類型。如果沒有指定表引擎,預設與被複製表結構的表相同。

說明

雲資料庫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 ...

參數說明:

參數

說明

db

資料庫的名稱,預設為當前選擇的資料庫,本文以default為例。

s_table_name

通過SELECT語句建立的表。

ON CLUSTER cluster

在每一個節點上都建立一個表,固定為ON CLUSTER default

ENGINE = engine_name()

表引擎類型。

說明

雲資料庫ClickHouse支援的表引擎類型,請參見表引擎

SELECT ...

SELECT子句。

樣本:

create table t3 ON CLUSTER default ENGINE =MergeTree() order by Year as select * from default.local_table;

參考文檔