L'instruction ALTER TABLE modifie le schéma d'une table, par exemple en ajoutant ou en supprimant des colonnes et en définissant des attributs de table. Les clauses prises en charge diffèrent entre LindormTable et LindormTSDB.
Moteurs et versions
L'instruction ALTER TABLE s'applique à LindormTable et LindormTSDB. Aucune restriction de version ne s'applique.
Remarques relatives à l'utilisation
L'opération ALTER TABLE n'entraîne pas de verrouillage. La table reste lisible et accessible en écriture tout au long de l'opération. Toutefois, vous pouvez rencontrer des erreurs de délai d'expiration ou de brèves fluctuations de performances pour les raisons suivantes :
Lors d'une opération DDL, chaque shard est brièvement fermé puis rouvert pour recharger les métadonnées. Cette étape prend généralement entre 10 et plusieurs centaines de millisecondes. Si une requête cible un shard en cours de réouverture, vous pouvez constater un léger retard ou une brève fluctuation des performances. Nous vous recommandons d'effectuer les opérations DDL pendant les heures creuses.
Le résultat d'une opération DDL n'est renvoyé qu'après l'application de la modification à tous les shards. Pour les tables volumineuses, cela peut provoquer un délai d'expiration côté client si le délai configuré est court. L'opération continue de s'exécuter sur le serveur jusqu'à son achèvement.
Syntaxe
alter_table_statement ::= ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=
add_column_list
| DROP COLUMN [ IF EXISTS ] column_name
| SET table_options
| COMPACT (idcName)?
add_column_list ::= ADD [COLUMN] column_def ( ',' ADD [COLUMN] column_def )*
column_def ::= column_name type [TAG]
Différences entre les moteurs
L'instruction ALTER TABLE diffère entre LindormTable et LindormTSDB. Le tableau suivant compare les clauses prises en charge.
|
Clause |
LindormTable |
LindormTSDB |
|
ADD COLUMN |
Prise en charge |
Prise en charge |
|
COMPACT |
Prise en charge Remarque
Pris en charge dans LindormTable 2.3.4 et versions ultérieures. |
Non pris en charge |
|
DROP COLUMN |
Prise en charge Remarque
Pris en charge dans LindormTable 2.6.6 et versions ultérieures. |
Non pris en charge |
|
SET table_options |
Prise en charge |
Non pris en charge |
Clauses
ADD COLUMN
LindormTable et LindormTSDB prennent tous deux en charge la clause ADD COLUMN.
Les règles suivantes s'appliquent lors de l'ajout de colonnes :
Vous ne pouvez pas ajouter de colonne en tant que clé primaire.
Pour LindormTSDB, vous pouvez uniquement ajouter une colonne de tag ou une colonne de champ. Vous ne pouvez pas ajouter de colonne d'horodatage.
DROP COLUMN
La clause DROP COLUMN est disponible uniquement dans LindormTable 2.6.6 et versions ultérieures.
Si vous ne pouvez pas mettre à niveau votre instance vers la version 2.6.6 ou ultérieure depuis la console, contactez l'assistance technique Lindorm (ID DingTalk : s0s3eg3).
L'opération DROP COLUMN est asynchrone. Une fois l'instruction ALTER TABLE exécutée avec succès, le système supprime immédiatement la colonne cible, mais les données de la colonne ne sont nettoyées qu'à l'issue d'une opération COMPACT. Pour accélérer le nettoyage des données, exécutez manuellement les opérations FLUSH et COMPACT. Vous ne pouvez pas ajouter de colonne portant le même nom tant que les données ne sont pas entièrement nettoyées. Pour plus d'informations, consultez la rubrique FAQ.
SET table_options
Seul LindormTable prend en charge la clause SET table_options.
Pour obtenir la liste des attributs de table, consultez la rubrique Attributs de table. Utilisez l'instruction SHOW TABLE VARIABLES pour vérifier que les attributs de table ont été définis avec succès. Pour plus d'informations, consultez la rubrique SHOW TABLE VARIABLES.
Lors de la modification des attributs MUTABILITY et CONSISTENCY, tenez compte des points suivants :
Avant de créer un index, vous pouvez modifier à la fois MUTABILITY et CONSISTENCY.
-
Après la création d'un index :
Vous ne pouvez pas modifier MUTABILITY.
Vous pouvez faire passer la valeur de CONSISTENCY de
eventualàstrong, mais vous ne pouvez pas la faire passer destrongàeventual.
Pour un exemple, consultez la section Activer les colonnes dynamiques.
COMPACT
Seule la version LindormTable 2.3.4 et ultérieure prend en charge la clause COMPACT, qui déclenche une compaction majeure.
L'exécution d'une compaction majeure fusionne les fichiers de données, efface les données supprimées ou expirées, libère de l'espace disque et améliore les performances en lecture/écriture. Cette opération consomme beaucoup de ressources.
-
Si vous ne spécifiez pas
idcName:Pour une instance mono-zone, qui ne comporte qu'un seul IDC, la spécification de
idcNamen'a aucun effet.-
Pour une instance multi-zones, qui comporte deux IDC, les règles suivantes s'appliquent si vous ne spécifiez pas
idcName:Si votre version de LindormTable est antérieure à 2.6.4.2, une compaction majeure s'exécute uniquement sur
idc1.Si votre version de LindormTable est 2.6.4.2 ou ultérieure, une compaction majeure s'exécute par défaut sur tous les IDC.
Si vous spécifiez
idcName, la compaction majeure s'exécute sur l'IDC spécifié. Vous pouvez spécifier plusieurs noms d'IDC, séparés par des virgules (,).
Pour un exemple, consultez la section Exécuter une compaction majeure.
Exemples
Les exemples de cette rubrique utilisent la table sensor créée avec l'instruction suivante issue de la rubrique CREATE TABLE :
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time BIGINT NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);
Ajouter des colonnes
Ajoutez une nouvelle colonne n1 à la table sensor.
ALTER TABLE sensor ADD COLUMN n1 DOUBLE;
Ajoutez une colonne spatio-temporelle à la table de données spatio-temporelles roads.
-
Ajoutez une seule colonne spatiale.
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING); -
Ajoutez plusieurs colonnes spatiales.
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING), g3 GEOMETRY(POLYGON);
Supprimer une colonne
Supprimez la colonne n1 de la table sensor.
ALTER TABLE sensor DROP COLUMN IF EXISTS n1;
Vérifier le résultat
Exécutez l'instruction suivante pour vérifier le résultat :
DESCRIBE table sensor;
Activer les colonnes dynamiques
Activez la fonctionnalité de colonnes dynamiques pour la table sensor.
ALTER TABLE sensor SET DYNAMIC_COLUMNS = 'true';
Pour plus d'informations sur les colonnes dynamiques, consultez la rubrique Colonnes dynamiques.
Définir la cohérence de la table
Définissez la cohérence pour la table de données spatio-temporelles roads.
ALTER TABLE roads SET 'CONSISTENCY' = 'strong';
Définir le TTL
-
Définissez le TTL pour la table
sensoren secondes (s).ALTER TABLE sensor SET TTL = '2592000'; -
Supprimez le TTL de la table
sensor.ALTER TABLE sensor SET TTL = '';Vérifier le résultat
Dans le système de gestion du cluster, accédez à la page Overview. Cliquez sur le nom de la table cible sous la base de données cible. Dans la section Current table details, consultez la valeur du paramètre TTL. Pour savoir comment accéder au système de gestion du cluster, consultez la rubrique Se connecter au système de gestion du cluster.
Définir l'algorithme de compression
-
Définissez l'algorithme de compression de la table
sensorsurZSTD.ALTER TABLE sensor SET COMPRESSION = 'ZSTD'; -
Définissez l'algorithme de compression de la table
sensorsurNONE.ALTER TABLE sensor SET COMPRESSION = 'NONE';Vérifier le résultat
Dans le système de gestion du cluster, accédez à la page Overview et cliquez sur le nom de la table cible sous la base de données cible. Dans la section Current table details, cliquez sur View table properties pour consulter la valeur du paramètre COMPRESSION.
Configurer la séparation des données chaudes et froides
Pour plus d'informations sur la séparation des données chaudes et froides, consultez la rubrique Présentation de la séparation des données chaudes et froides.
Définir la limite entre les données chaudes et froides
Horodatage d'ingestion
Définissez la limite entre les données chaudes et froides pour la table sensor. LindormTable détermine s'il faut archiver les données dans le stockage Capacity en fonction de l'horodatage d'ingestion de chaque ligne.
-- Enable hot and cold data separation for the sensor table based on ingestion timestamp and set the boundary to one day.
ALTER TABLE sensor SET CHS = '86400', CHS_L2 = 'storagetype=COLD';
Vérifier le résultat
Exécutez l'instruction SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; pour afficher les valeurs des paramètres CHS et CHS_L2. Pour plus d'informations sur la syntaxe SHOW VARIABLES, consultez la rubrique SHOW VARIABLES.
Colonne temporelle personnalisée
La séparation des données basée sur une colonne temporelle personnalisée présente des limitations. Avant d'utiliser cette fonctionnalité, consultez les Remarques relatives à l'utilisation.
Définissez la colonne temporelle personnalisée time comme limite entre les données chaudes et froides pour la table sensor. LindormTable détermine s'il faut archiver les données dans le stockage Capacity en fonction de l'horodatage d'événement de la colonne time de chaque ligne.
-- Enable hot and cold data separation for the sensor table based on a custom column, set the boundary to one day, and use the time column.
ALTER TABLE sensor SET CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=time';
Vérifier le résultat
Exécutez l'instruction SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; pour afficher les valeurs des paramètres CHS, CHS_L2 et CHS_COLUMN. Pour plus d'informations sur la syntaxe SHOW VARIABLES, consultez la rubrique SHOW VARIABLES.
Supprimer la limite entre les données chaudes et froides
Supprimez la limite entre les données chaudes et froides pour la table sensor.
ALTER TABLE sensor SET CHS = '', CHS_L2 = '';
Vérifier le résultat
Exécutez l'instruction SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; pour afficher les valeurs des paramètres CHS et CHS_L2. Pour plus d'informations sur la syntaxe SHOW VARIABLES, consultez la rubrique SHOW VARIABLES.
Exécuter une compaction majeure
-
Exécutez une compaction majeure sur la table sensor.
ALTER TABLE sensor COMPACT;RemarquePour une instance multi-zones, tenez compte des règles suivantes :
Si votre version de LindormTable est antérieure à 2.6.4.2, le système exécute une compaction majeure sur
idc1par défaut si vous ne spécifiez pas d'IDC.Si votre version de LindormTable est 2.6.4.2 ou ultérieure, le système exécute une compaction majeure sur tous les IDC par défaut.
-
Exécutez une compaction majeure sur
idc2.ALTER TABLE sensor COMPACT 'idc2'; -
Exécutez une compaction majeure sur
idc1etidc2.ALTER TABLE sensor COMPACT 'idc1,idc2';