ApsaraDB for ClickHouse propose quatre méthodes pour créer une table : à partir d'un schéma explicite, en copiant le schéma d'une table existante, en reproduisant la structure d'un jeu de résultats SELECT, ou sous forme de table distribuée couvrant plusieurs tables locales.
Créer une table locale
Une table locale stocke les données sur les nœuds où elle est créée. Utilisez ON CLUSTER default pour répliquer la définition de la table sur tous les nœuds du cluster.
Syntaxe
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, ...];
Paramètres
| Paramètre | Description | ||
|---|---|---|---|
db |
Nom de la base de données. Par défaut, il s'agit de la base de données actuelle. | ||
local_table_name |
Nom de la table locale. | ||
ON CLUSTER cluster |
Crée la table sur chaque nœud. Valeur fixe : ON CLUSTER default. |
||
name1, name2 |
Noms des colonnes. | ||
type1, type2 |
Types de données des colonnes. Pour consulter les types pris en charge, reportez-vous à Types de données. | ||
ENGINE = engine_name() |
Moteur de table. Pour connaître les moteurs disponibles, consultez Moteurs de table. | ||
ORDER BY expr |
Clé de tri. Obligatoire. Accepte un tuple de colonnes ou toute expression valide. | ||
`[DEFAULT |
MATERIALIZED |
ALIAS expr]` |
Type d'expression par défaut pour une colonne : |
GRANULARITY |
Granularité de l'index. | ||
[PARTITION BY expr] |
Clé de partitionnement. Il s'agit généralement d'un champ de date ou d'une expression de date, mais d'autres champs ou expressions sont également acceptés. | ||
[PRIMARY KEY expr] |
Clé primaire. Elle prend par défaut la même valeur que la clé de tri. Dans la plupart des cas, vous pouvez omettre cette clause. | ||
[SAMPLE BY expr] |
Expression d'échantillonnage. Si elle est spécifiée, incluez-la dans la clé primaire. | ||
[SETTINGS name=value, ...] |
Paramètres supplémentaires influençant les performances. Consultez Éléments de configuration SETTINGS. |
Les clausesORDER BY,GRANULARITY,PARTITION BY,PRIMARY KEY,SAMPLE BYetSETTINGSsont uniquement prises en charge par les moteurs de table de la famille MergeTree. Reportez-vous à CREATE TABLE .
Configuration de ReplicatedMergeTree
Lorsque vous utilisez un moteur ReplicatedMergeTree, les deux formes suivantes sont équivalentes :
ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}'): forme complète ; ne modifiez pas le modèle de chemin.ReplicatedMergeTree(): forme abrégée qui se développe automatiquement en forme complète.
Dans les clusters Double-replica Edition, toutes les tables doivent utiliser des moteurs de table Replicated de la famille MergeTree. Les moteurs non répliqués ne dupliquent pas les données entre les réplicas, ce qui risque d'entraîner des incohérences de données.
Exemple
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;
Créer une table distribuée
Une table distribuée constitue une vue logique sur un ensemble de tables locales. Le système route automatiquement les écritures vers les tables locales sous-jacentes en fonction de la clé de sharding. Les requêtes agrègent les résultats de toutes les tables locales avant de les retourner.
Seule l'édition Community-Compatible Edition d'ApsaraDB for ClickHouse prend en charge les tables distribuées utilisant le moteur Distributed . Dans l'édition Enterprise Edition, plusieurs nœuds agissent comme des réplicas plutôt que comme des shards, rendant les tables distribuées inutiles.
Créez des tables locales sur tous les nœuds avant de créer une table distribuée.
Syntaxe
CREATE TABLE [db.]distributed_table_name ON CLUSTER default
AS db.local_table_name ENGINE = Distributed(cluster, db, local_table_name [, sharding_key])
Paramètres
| Paramètre | Description |
|---|---|
db |
Nom de la base de données. Par défaut, il s'agit de la base de données actuelle. |
distributed_table_name |
Nom de la table distribuée. |
ON CLUSTER cluster |
Crée la table sur chaque nœud. Valeur fixe : ON CLUSTER default. |
local_table_name |
Nom de la table locale sous-jacente. |
sharding_key |
Expression de sharding déterminant quel shard reçoit chaque ligne. Accepte une expression telle que rand() ou une colonne entière comme user_id. |
Exemple
CREATE TABLE distributed_table ON CLUSTER default
AS default.local_table
ENGINE = Distributed(default, default, local_table, rand());
Copier un schéma de table
Créez une nouvelle table avec les mêmes définitions de colonnes et le même moteur qu'une table existante.
Syntaxe
CREATE TABLE [IF NOT EXISTS] [db.]table_name2 ON CLUSTER cluster AS [db.]table_name1 [ENGINE = engine_name];
Paramètres
| Paramètre | Description |
|---|---|
db |
Nom de la base de données. Par défaut, il s'agit de la base de données actuelle. |
table_name1 |
Table source dont le schéma est copié. |
table_name2 |
Nouvelle table à créer. |
ON CLUSTER cluster |
Crée la table sur chaque nœud. Valeur fixe : ON CLUSTER default. |
[ENGINE = engine_name] |
Moteur de table pour la nouvelle table. En l'absence de cette clause, la nouvelle table utilise le même moteur que la table source. Consultez Moteurs de table. |
Exemple
CREATE TABLE t2 ON CLUSTER default as default.local_table;
Créer une table à partir d'une requête SELECT
Créez une table dont le schéma correspond au jeu de résultats d'une instruction SELECT et remplissez-la avec les résultats de la requête.
Syntaxe
CREATE TABLE [IF NOT EXISTS] [db.]s_table_name ON CLUSTER cluster ENGINE = engine_name() AS SELECT ...
Paramètres
| Paramètre | Description |
|---|---|
db |
Nom de la base de données. Par défaut, il s'agit de la base de données actuelle. |
s_table_name |
Nom de la table à créer. |
ON CLUSTER cluster |
Crée la table sur chaque nœud. Valeur fixe : ON CLUSTER default. |
ENGINE = engine_name() |
Moteur de table. Consultez Moteurs de table. |
SELECT ... |
Requête dont le jeu de résultats définit le schéma et les données initiales. |
Exemple
CREATE TABLE t3 ON CLUSTER default ENGINE =MergeTree() order by Year as select * from default.local_table;