このトピックでは、ApsaraDB for 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, ...];
次の表に、上記の構文のパラメーターを示します。
パラメーター | 説明 |
| データベースの名前。 デフォルト値は、現在のデータベースの名前です。 この例では、デフォルトがデータベース名として使用されます。 |
| ローカルテーブルの名前。 |
| 各ノードにローカルテーブルを作成することを指定します。 値を |
| 列の名前。 |
| 列のデータ型。 説明 ApsaraDB For ClickHouseでサポートされているデータ型の詳細については、「データ型」をご参照ください。 |
| テーブルエンジンのタイプ。 Double-replica Editionのクラスターにテーブルを作成する場合は、プレフィックスがReplicatedで、MergeTreeファミリーのエンジン間でのデータレプリケーションをサポートするテーブルエンジンを使用する必要があります。 プレフィックスがReplicatedのテーブルエンジンを使用しない場合、レプリカ間でデータをレプリケートできず、一貫性のないデータクエリ結果が返されます。 このエンジンを使用してテーブルを作成する場合は、次のいずれかの方法を使用してパラメーターを設定します。
説明 ApsaraDB For ClickHouseでサポートされているテーブルエンジンの種類の詳細については、「テーブルエンジン」をご参照ください。 |
| ソートキー。 このパラメータは必須です。 値は、列のセットのタプルまたは式にすることができます。 |
| デフォルトの式。
|
| インデックスの粒度。 |
| パーティションキー。 ほとんどの場合、データは日付で分割されます。 別のフィールドまたはフィールド式をパーティションキーとして指定できます。 |
| 主キー。 デフォルトでは、主キーはソートキーと同じです。 ほとんどの場合、主キーを指定するために |
| サンプリング式。 サンプリング式を使用する場合は、主キーにサンプリング式を含めます。 |
| テーブル作成のパフォーマンスに影響を与える追加のパラメーター。 説明
|
MergeTreeファミリーのテーブルエンジンのみが、ORDER BY
、GRANULARITY
、PARTITION BY
、PRIMARY KEY
、SAMPLE BY
、[SETTINGS name=value, ...]
のパラメーターをサポートしています。 その他のパラメーターの詳細については、「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])
次の表に、上記の構文のパラメーターを示します。
パラメーター | 説明 |
| データベースの名前。 デフォルト値は、現在のデータベースの名前です。 この例では、デフォルトがデータベース名として使用されます。 |
| 分散テーブルの名前。 |
| 各ノードにテーブルを作成することを指定します。 値を |
| 作成したローカルテーブルの名前。 |
| シャーディング式。 シャーディング式は、データを書き込むシャードを決定します。
|
例:
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];
次の表に、上記の構文のパラメーターを示します。
パラメーター | 説明 |
| データベースの名前。 デフォルト値は、現在のデータベースの名前です。 この例では、デフォルトがデータベース名として使用されます。 |
| スキーマのコピー元のソーステーブルの名前。 この例では、作成されたローカルテーブルlocal_tableが使用されます。 |
| 作成するテーブルの名前を指定します。 |
| 各ノードにテーブルを作成することを指定します。 値を |
| テーブルエンジンのタイプ。 テーブルの作成時にテーブルエンジンを指定しない場合、ソーステーブルのテーブルエンジンがデフォルトで使用されます。 説明 ApsaraDB For ClickHouseでサポートされているテーブルエンジンの種類の詳細については、「テーブルエンジン」をご参照ください。 |
例:
create table t2 ON CLUSTER default as default.local_table;
SELECT句のクエリ結果セットと同じスキーマを持つテーブルを作成します。
指定したテーブルエンジンを使用して、SELECT
句のクエリ結果セットと同じスキーマを持つテーブルを作成できます。 SELECT句のクエリ結果セットがテーブルに入力されます。
構文:
CREATE TABLE [IF NOT EXISTS] [db.]s_table_name ON CLUSTER cluster ENGINE = engine_name() AS SELECT ...
次の表に、上記の構文のパラメーターを示します。
パラメーター | 説明 |
| データベースの名前。 デフォルト値は、現在のデータベースの名前です。 この例では、デフォルトがデータベース名として使用されます。 |
| create tableステートメントでSELECT句を指定して作成するテーブルの名前。 |
| 各ノードにテーブルを作成することを指定します。 値を |
| テーブルエンジンのタイプ。 説明 ApsaraDB For ClickHouseでサポートされているテーブルエンジンの種類の詳細については、「テーブルエンジン」をご参照ください。 |
|
|
例:
create table t3 ON CLUSTER default ENGINE =MergeTree() order by Year as select * from default.local_table;
関連ドキュメント
テーブルの作成方法の詳細については、「create table」をご参照ください。
テーブルスキーマをコピーしてテーブルを作成する方法の詳細については、「他のテーブルに類似したスキーマ」をご参照ください。
create tableステートメントでSELECT句を指定してテーブルを作成する方法の詳細については、「SELECTクエリから」をご参照ください。