Tous les produits
Search
Centre de documentation

AnalyticDB:ALTER TABLE

Dernière mise à jour :Aug 10, 2026

ALTER TABLE modifie le schéma d'une table existante dans AnalyticDB for MySQL. Utilisez cette commande pour renommer des tables et des colonnes, changer les types de données et les contraintes des colonnes, gérer les index, ajuster les cycles de vie des partitions et configurer les politiques de stockage hiérarchisé.

Table d'exemple

La plupart des exemples de cette rubrique utilisent la table customer. Si vous ne l'avez pas encore créée, exécutez l'instruction suivante :

Instruction d'exemple pour créer la table

CREATE TABLE customer (
  customer_id BIGINT NOT NULL COMMENT 'Customer ID',
  customer_name VARCHAR NOT NULL COMMENT 'Customer name',
  phone_num BIGINT NOT NULL COMMENT 'Phone number',
  city_name VARCHAR NOT NULL COMMENT 'City',
  sex INT NOT NULL COMMENT 'Gender',
  id_number VARCHAR NOT NULL COMMENT 'ID card number',
  home_address VARCHAR NOT NULL COMMENT 'Home address',
  office_address VARCHAR NOT NULL COMMENT 'Office address',
  age INT NOT NULL COMMENT 'Age',
  login_time TIMESTAMP NOT NULL COMMENT 'Logon time',
  PRIMARY KEY (login_time,customer_id,phone_num)
 )
DISTRIBUTED BY HASH(customer_id)
PARTITION BY VALUE(DATE_FORMAT(login_time, '%Y%m%d')) LIFECYCLE 30
COMMENT 'Customer information table';

Les exemples concernant les index JSON, les clés étrangères et les index vectoriels utilisent leurs propres définitions de table.

Syntaxe

ALTER TABLE table_name
  { ADD [COLUMN] column_name column_definition
  | ADD [COLUMN] (column_name column_definition,...)
  | ADD [CONSTRAINT [symbol]] FOREIGN KEY (fk_column_name) REFERENCES pk_table_name (pk_column_name)
  | ADD {INDEX|KEY} [index_name] (column_name)
  | ADD {INDEX|KEY} [index_name] (column_name|column_name->'$.json_path')
  | ADD {INDEX|KEY} [index_name] (column_name->'$[*]')
  | ADD CLUSTERED [INDEX|KEY] [index_name] (column_name [ASC|DESC])
  | ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]
  | ADD ANN [INDEX|KEY] [index_name] (column_name) [algorithm=HNSW_PQ ] [distancemeasure=SquaredL2]
  | COMMENT 'comment'
  | DROP CLUSTERED KEY index_name
  | DROP [COLUMN] column_name
  | DROP FOREIGN KEY symbol
  | DROP FULLTEXT INDEX index_name
  | DROP {INDEX|KEY} index_name
  | DROP PARTITION (partition_name,...)
  | MODIFY [COLUMN] column_name column_definition
  | RENAME COLUMN column_name TO new_column_name
  | RENAME new_table_name
  | INDEX_ALL = {'Y'|'N'}
  | storage_policy
  | PARTITION BY VALUE{(column_name)|(DATE_FORMAT(column_name, 'format'))|(FROM_UNIXTIME(column_name, 'format'))} LIFECYCLE N
  }

column_definition:
 column_type [column_attributes][column_constraints][COMMENT 'comment']

column_attributes:
 [DEFAULT{constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT]

column_constraints:
 [NULL|NOT NULL]

storage_policy:
 STORAGE_POLICY= {'HOT'|'COLD'|'MIXED' hot_partition_count=N}

Tables

Renommer une table

ALTER TABLE db_name.table_name RENAME new_table_name

Exemple : Renommez la table customer en new_customer.

ALTER TABLE customer RENAME new_customer;

Modifier le commentaire d'une table

ALTER TABLE db_name.table_name COMMENT 'comment'

Exemple : Mettez à jour le commentaire de la table customer.

ALTER TABLE customer COMMENT 'Customer table';

Colonnes

Ajouter une colonne

ALTER TABLE db_name.table_name ADD [COLUMN]
  {column_name column_type [DEFAULT {constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT] [NULL|NOT NULL] [COMMENT 'comment']
  | (column_name column_type [DEFAULT {constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT] [NULL|NOT NULL] [COMMENT 'comment'],...)}
Les colonnes de clé primaire ne peuvent pas être ajoutées.

Exemple 1 : Ajoutez une colonne province de type VARCHAR à la table customer.

ALTER TABLE adb_demo.customer ADD COLUMN province VARCHAR COMMENT 'Province';

Example 2: Ajoutez deux colonnes simultanément : vip de type BOOLEAN et tags de type VARCHAR.

ALTER TABLE adb_demo.customer ADD COLUMN (vip BOOLEAN COMMENT 'Is VIP', tags VARCHAR DEFAULT 'None' COMMENT 'Tag');

Supprimer une colonne

ALTER TABLE db_name.table_name DROP [COLUMN] column_name
Les colonnes de clé primaire ne peuvent pas être supprimées.

Exemple : Supprimez la colonne province de la table customer.

ALTER TABLE adb_demo.customer DROP COLUMN province;

Renommer une colonne

ALTER TABLE db_name.table_name RENAME COLUMN column_name TO new_column_name
Les colonnes de clé primaire ne peuvent pas être renommées.

Exemple : Renommez la colonne city_name en city dans la table customer.

ALTER TABLE customer RENAME COLUMN city_name TO city;

Modifier le type de données d'une colonne

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name new_column_type

Les modifications de type de données suivent des règles d'élargissement uniquement : vous pouvez étendre la plage d'un type, mais pas la réduire. Le tableau ci-dessous résume les modifications prises en charge :

Modification Prise en charge
Entier plus petit vers entier plus grand (par exemple, TINYINT vers BIGINT) Oui
Entier plus grand vers entier plus petit (par exemple, BIGINT vers TINYINT) Non
FLOAT vers DOUBLE Oui
DOUBLE vers FLOAT Non
Type entier vers type à virgule flottante (FLOAT ou DOUBLE) Oui (une version spécifique est requise)
Augmentation de la précision DECIMAL Oui (une version spécifique est requise)
Diminution de la précision DECIMAL Non
Modification du type de données d'une colonne de clé primaire Non
Important

La modification d'un type entier en type à virgule flottante et l'augmentation de la précision DECIMAL nécessitent un cluster avec une version du noyau 3.1.8.10–3.1.8.x, 3.1.9.6–3.1.9.x, 3.1.10.3–3.1.10.x ou 3.2.0.1 ou ultérieure.

Exemple : Modifiez le type de la colonne age de INT à BIGINT.

ALTER TABLE adb_demo.customer MODIFY COLUMN age BIGINT;

Modifier la valeur par défaut d'une colonne

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type DEFAULT {constant | CURRENT_TIMESTAMP}

Exemple 1 : Définissez la valeur par défaut de sex sur 0.

ALTER TABLE adb_demo.customer MODIFY COLUMN sex INT NOT NULL DEFAULT 0;

Exemple 2 : Définissez la valeur par défaut de login_time sur CURRENT_TIMESTAMP.

ALTER TABLE adb_demo.customer MODIFY COLUMN login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

Autoriser les valeurs NULL

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type NULL
Seules les modifications de NOT NULL vers NULL sont prises en charge. La modification de NULL vers NOT NULL n'est pas prise en charge.

Exemple : Autorisez les valeurs NULL pour la colonne province.

ALTER TABLE adb_demo.customer MODIFY COLUMN province VARCHAR NULL;

Modifier le commentaire d'une colonne

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type COMMENT 'new_comment'

Exemple : Mettez à jour le commentaire de la colonne province.

ALTER TABLE adb_demo.customer MODIFY COLUMN province VARCHAR COMMENT 'The province where the customer is located';

Index

Ajouter un index standard

Par défaut, les tables XUANWU_V2 sont créées sans index sur toutes les colonnes (INDEX_ALL='N'), tandis que les tables XUANWU les incluent (INDEX_ALL='Y'). Ajoutez un index aux colonnes individuelles selon vos besoins.

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name)

La colonne doit avoir un type de données simple. Pour les colonnes JSON, consultez la section Ajouter un index JSON.

Exemple : Ajoutez un index à la colonne age.

ALTER TABLE adb_demo.customer ADD KEY age_idx(age);

Modifier les index sur toutes les colonnes

Pour les tables XUANWU_V2, activez ou désactivez l'indexation sur toutes les colonnes après la création de la table à l'aide de la propriété INDEX_ALL. Ce paramètre n'affecte pas les index JSON, full-text ou vectoriels.

Prérequis

La table XUANWU_V2 doit se trouver dans un cluster dont la version du noyau est 3.2.3.7 ou ultérieure, ou 3.2.4.3 ou ultérieure.

Pour afficher et mettre à jour la version mineure de votre cluster, connectez-vous à la console AnalyticDB for MySQL et accédez à la section Configuration Information de la page Cluster Information .
ALTER TABLE db_name.table_name INDEX_ALL = {'Y'|'N'};
Valeur Effet
Y Mode d'index sur toutes les colonnes : crée des index standards pour toutes les colonnes
N Mode sans index sur toutes les colonnes : conserve uniquement l'index de clé primaire ; tous les autres index standards sont supprimés

Remarques d'utilisation :

  • Pour les tables XUANWU, l'indexation sur toutes les colonnes ne peut être configurée qu'au moment de la création de la table. Pour la désactiver, supprimez les index individuellement.

  • Si INDEX_ALL='Y' et que vous supprimez un index standard à l'aide d'une instruction DDL (Data Definition Language), la propriété passe automatiquement à INDEX_ALL='N'. Seul l'index cible est supprimé ; les autres index restent inchangés.

  • Lorsque INDEX_ALL='N', l'instruction SHOW CREATE TABLE peut ne pas afficher explicitement cette propriété, mais elle reste effective.

Exemple 1 : Désactivez l'indexation sur toutes les colonnes pour la table customer (actuellement INDEX_ALL='Y').

ALTER TABLE adb_demo.customer INDEX_ALL = 'N';

Après l'exécution, les index standards sur les colonnes non primaires telles que customer_name, city_name et sex sont supprimés.

Exemple 2 : Activez l'indexation sur toutes les colonnes pour la table customer (actuellement INDEX_ALL='N', avec des index existants sur customer_id, phone_num et login_time).

ALTER TABLE adb_demo.customer INDEX_ALL = 'Y';

Après l'exécution, des index standards sont créés pour toutes les colonnes qui n'en possèdent pas encore, telles que customer_name, city_name et sex.

Ajouter un index JSON

Remarques d'utilisation

Le comportement de l'index JSON diffère selon le moteur de table :

  • Tables XUANWU_V2 (partitionnées et non partitionnées) : l'index prend effet immédiatement — aucune tâche BUILD n'est nécessaire.

  • Tables XUANWU non partitionnées : l'index prend effet uniquement après la fin d'une tâche BUILD.

  • Tables XUANWU partitionnées : déclenchez manuellement une tâche BUILD sur toute la table. L'index prend effet uniquement après la fin de la tâche BUILD.

Index JSON

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name|column_name->'$.json_path')
Paramètre Description
column_name Crée un index sur une colonne JSON. La colonne doit être de type JSON.
column_name->'$.json_path' Crée un index sur une clé de propriété spécifique dans un objet JSON. Pour plus d'informations, consultez la section Index JSON.
Important
  • La syntaxe column_name->'$.json_path' nécessite une version de cluster V3.1.6.8 ou ultérieure. Pour afficher et mettre à jour la version mineure, connectez-vous à la console AnalyticDB for MySQL et accédez à la section Configuration Information de la page Cluster Information.

  • Si une colonne JSON possède déjà un index, supprimez-le avant de créer un index sur une clé de propriété de cette colonne.

Exemple : Créez un index JSON sur la propriété a de la colonne vj.

CREATE TABLE json_test(
  id INT,
  vj JSON
)
DISTRIBUTED BY HASH(id);

INSERT INTO json_test VALUES(1,'{"a":1,"b":2}'),(2,'{"a":2,"b":3}');
ALTER TABLE json_test ADD KEY age_idx(vj->'$.a');

Index de tableau JSON

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name->'$[*]')

column_name->'$[*]' spécifie la colonne de tableau JSON à indexer. Par exemple, vj->'$[*]' crée un index de tableau JSON sur la colonne vj.

Exemple : Créez un index de tableau JSON sur la colonne vj.

CREATE TABLE json_test(
  id INT,
  vj JSON
)
DISTRIBUTED BY HASH(id);

INSERT INTO json_test VALUES(1, '["CP-018673", 1, false]');
ALTER TABLE json_test ADD KEY index_vj(vj->'$[*]');

Supprimer un index standard ou JSON

ALTER TABLE db_name.table_name DROP KEY index_name

Exécutez SHOW INDEX FROM db_name.table_name; pour trouver le nom de l'index.

Exemple 1 : Supprimez l'index age_idx de la table customer.

ALTER TABLE adb_demo.customer DROP KEY age_idx;

Exemple 2 : Supprimez l'index de tableau JSON index_vj de la table json_test.

ALTER TABLE adb_demo.customer DROP KEY index_vj;

Ajouter un index clusterisé

ALTER TABLE db_name.table_name ADD CLUSTERED [INDEX|KEY] [index_name] (column_name1 [ASC|DESC], column_name2 [ASC|DESC])

Remarques d'utilisation :

  • Les index clusterisés trient par ordre croissant (ASC) par défaut. Pour les charges de travail qui trient par ordre décroissant, définissez DESC lors de la création de la table.

  • Une table ne peut avoir qu'un seul index clusterisé.

  • Après avoir ajouté un index clusterisé, déclenchez et terminez une tâche BUILD pour qu'il prenne effet. Exécutez SHOW CREATE TABLE db_name.table_name; pour confirmer.

Exemple : Ajoutez un index clusterisé sur customer_id.

ALTER TABLE adb_demo.customer ADD CLUSTERED KEY (customer_id ASC);

Supprimer un index clusterisé

ALTER TABLE db_name.table_name DROP CLUSTERED KEY index_name

Exécutez SHOW CREATE TABLE db_name.table_name pour trouver le nom de l'index clusterisé.

Exemple : Supprimez l'index clusterisé nommé index de la table customer.

ALTER TABLE adb_demo.customer DROP CLUSTERED KEY index;

Ajouter un index full-text

Prérequis

Un cluster AnalyticDB for MySQL de version V3.1.4.9 ou ultérieure. Pour de meilleurs résultats, utilisez la version V3.1.4.17 ou ultérieure.

Pour savoir comment interroger la version mineure, consultez la section Comment interroger la version d'un cluster AnalyticDB for MySQL ?
ALTER TABLE db_name.table_name ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]
Paramètre Description
column_name La colonne à indexer. Doit être de type VARCHAR.
index_option Facultatif. Spécifie le tokenizer et le dictionnaire personnalisé.
WITH ANALYZER analyzer_name L'analyseur pour l'index full-text. Consultez la section Analyseurs pour les index full-text.
WITH DICT tbl_dict_name Le dictionnaire personnalisé pour l'index full-text. Consultez la section Dictionnaires personnalisés pour les index full-text.
Important

Un index full-text prend effet uniquement après le déclenchement et la fin d'une tâche BUILD.

Exemple : Ajoutez un index full-text à la colonne home_address en utilisant l'analyseur standard.

ALTER TABLE adb_demo.customer ADD FULLTEXT INDEX fidx_k(home_address) WITH ANALYZER standard;

Pour plus d'informations, consultez la section Créer un index full-text.

Supprimer un index full-text

ALTER TABLE db_name.table_name DROP FULLTEXT INDEX index_name

Exemple : Supprimez l'index full-text fidx_k de la table customer.

ALTER TABLE adb_demo.customer DROP FULLTEXT INDEX fidx_k;

Ajouter un index vectoriel

Prérequis

Un cluster AnalyticDB for MySQL de version V3.1.4.0 ou ultérieure. Versions mineures recommandées : 3.1.5.16, 3.1.6.8, 3.1.8.6 et ultérieures.

Si votre cluster n'utilise pas l'une des versions recommandées, définissez CSTORE_PROJECT_PUSH_DOWN et CSTORE_PPD_TOP_N_ENABLE sur false avant d'utiliser la recherche vectorielle. Pour mettre à jour la version mineure, contactez le support technique. Pour savoir comment interroger la version mineure, consultez la section Comment interroger la version d'un cluster AnalyticDB for MySQL ?
ALTER TABLE db_name.table_name ADD ANN [INDEX|KEY] [index_name] (column_name) [algorithm=HNSW_PQ] [distancemeasure=SquaredL2]
Paramètre Description
index_name Le nom de l'index. Pour les conventions de nommage, consultez la section Limites de nommage.
column_name La colonne vectorielle à indexer. Le type de colonne doit être array<float>, array<byte> ou array<smallint>.
algorithm L'algorithme utilisé pour calculer la distance vectorielle. Définissez sur HNSW_PQ.
distancemeasure La formule de distance. Définissez sur SquaredL2. Formule : (x1-y1)^2 + (x2-y2)^2 + ... + (xn-yn)^2.

Exemple : Créez des index vectoriels sur les colonnes float_feature et short_feature.

CREATE TABLE vector (
  xid BIGINT NOT NULL,
  cid BIGINT NOT NULL,
  uid VARCHAR NOT NULL,
  vid VARCHAR NOT NULL,
  wid VARCHAR NOT NULL,
  float_feature array<FLOAT>(4),
  short_feature array<SMALLINT>(4),
  PRIMARY KEY (xid, cid, vid)
) DISTRIBUTED BY HASH(xid);
ALTER TABLE vector ADD ANN INDEX idx_float_feature(float_feature);
ALTER TABLE vector ADD ANN INDEX idx_short_feature(short_feature);

Ajouter une clé étrangère

Prérequis

Un cluster AnalyticDB for MySQL de version V3.1.10 ou ultérieure.

Pour afficher et mettre à jour la version mineure, connectez-vous à la console AnalyticDB for MySQL et accédez à la section Configuration Information de la page Cluster Information .
ALTER TABLE db_name.table_name ADD [CONSTRAINT [symbol]] FOREIGN KEY (fk_column_name) REFERENCES db_name.pk_table_name (pk_column_name)
Paramètre Description
db_name.table_name La table à laquelle ajouter la clé étrangère.
symbol Facultatif. Le nom de la contrainte de clé étrangère — doit être unique au sein de la table. Si omis, l'analyseur utilise <fk_column_name>_fk comme nom de contrainte.
fk_column_name La colonne de clé étrangère. Doit déjà exister.
pk_table_name La table principale. Doit déjà exister.
pk_column_name La colonne de clé primaire de la table principale. Doit déjà exister.

Remarques d'utilisation :

  • Une table peut avoir plusieurs index de clé étrangère.

  • Un index de clé étrangère ne peut pas s'étendre sur plusieurs colonnes (par exemple, FOREIGN KEY (sr_item_sk, sr_ticket_number) n'est pas pris en charge).

  • AnalyticDB for MySQL n'applique pas les contraintes de données. Validez la relation de contrainte entre les clés primaires et étrangères dans votre application.

  • Les contraintes de clé étrangère ne peuvent pas être ajoutées aux tables externes.

Exemple : Ajoutez une clé étrangère sur store_sales référençant la table item.

CREATE TABLE item
(
 i_item_sk BIGINT NOT NULL,
 i_current_price BIGINT,
 PRIMARY KEY(i_item_sk)
)
DISTRIBUTED BY HASH(i_item_sk);

CREATE TABLE store_sales
(
 ss_sale_id BIGINT,
 ss_store_sk BIGINT,
 ss_item_sk BIGINT NOT NULL,
 PRIMARY KEY(ss_sale_id)
);
ALTER TABLE store_sales ADD CONSTRAINT ss_item_sk FOREIGN KEY (ss_item_sk) REFERENCES item (i_item_sk);

Pour plus d'informations, consultez la section Éliminer les jointures inutiles à l'aide de contraintes de clé primaire et étrangère.

Supprimer une clé étrangère

ALTER TABLE db_name.table_name DROP FOREIGN KEY fk_symbol

Exemple :

ALTER TABLE store_returns DROP FOREIGN KEY sr_item_sk_fk;

Partitions

Modifier le cycle de vie de la partition

ALTER TABLE db_name.table_name PARTITIONS N

Remarques d'utilisation :

  • Sur les clusters avec une version du noyau 3.2.4.1 ou ultérieure, définissez N sur 0 pour supprimer la gestion du cycle de vie des partitions.

  • Le nouveau cycle de vie prend effet uniquement après le déclenchement et la fin d'une tâche BUILD. Exécutez SHOW CREATE TABLE db_name.table_name; pour vérifier.

Exemple 1 : Supprimez le cycle de vie de la table customer.

ALTER TABLE customer PARTITIONS 0;

Exemple 2 : Modifiez le cycle de vie de 30 jours à 40 jours.

ALTER TABLE customer PARTITIONS 40;

Supprimer une partition

ALTER TABLE DROP PARTITION a le même effet que TRUNCATE TABLE PARTITION .
ALTER TABLE db_name.table_name DROP PARTITION (partition_name,...)
Avertissement

La suppression d'une partition efface définitivement toutes les données de cette partition. Cette action est irréversible.

Exemple 1 : Supprimez la partition 20241220 de la table customer.

ALTER TABLE adb_demo.customer DROP PARTITION (20241220);

Exemple 2 : Supprimez les partitions 20241218 et 20241219.

ALTER TABLE adb_demo.customer DROP PARTITION (20241218,20241219);

Politiques de stockage

Modifier la politique de stockage hiérarchisé

Prérequis

  • Le cluster est de l'édition Enterprise, Basic, Data Lakehouse ou Data Warehouse (mode élastique).

  • Exigences de version du noyau :

    • Tables XUANWU : aucune restriction de version du noyau.

    • Tables XUANWU_V2 : la version du noyau doit être 3.2.2.15 ou ultérieure, 3.2.3.13 ou ultérieure, 3.2.4.9 ou ultérieure, ou 3.2.5.3 ou ultérieure.

Pour afficher et mettre à jour la version mineure, connectez-vous à la console AnalyticDB for MySQL et accédez à la section Configuration Information de la page Cluster Information .

Pour les tables XUANWU_V2, la tâche planifiée de déplacement des données entre le stockage chaud et froid doit être activée :

  • Vérifiez l'état : SHOW ADB_CONFIG KEY=SERVERLESS_DATA_STORAGE_CHANGE_SCHEDULE_ENABLE;

    • Si le résultat est FALSE, la tâche est désactivée et doit être activée.

    • Si une erreur est renvoyée, le paramètre n'a pas été défini et la valeur par défaut est TRUE.

  • Activez la tâche : SET ADB_CONFIG SERVERLESS_DATA_STORAGE_CHANGE_SCHEDULE_ENABLE = true;

ALTER TABLE db_name.table_name STORAGE_POLICY= {'HOT'|'COLD'|'MIXED' hot_partition_count=N}
La nouvelle politique de stockage prend effet uniquement après le déclenchement et la fin d'une tâche BUILD pour la table. Par défaut, cette tâche s'exécute automatiquement en arrière-plan. Avant la fin de la tâche BUILD, le nombre de partitions chaudes signalé par information_schema.table_usage peut différer de la politique configurée. Exécutez SHOW CREATE TABLE db_name.table_name; pour confirmer que la politique est effective.

Exemple 1 : Définissez la politique de stockage sur COLD.

ALTER TABLE customer storage_policy = 'COLD';

Exemple 2 : Définissez la politique de stockage sur HOT.

ALTER TABLE customer storage_policy = 'HOT';

Exemple 3 : Définissez la politique de stockage sur MIXED avec 10 partitions chaudes.

ALTER TABLE customer storage_policy = 'MIXED' hot_partition_count = 10;

FAQ

Puis-je modifier l'ordre des colonnes ?

Non. L'ordre des colonnes ne peut pas être modifié dans AnalyticDB for MySQL.

Comment convertir une colonne VARCHAR en LONGTEXT ?

Aucune conversion n'est nécessaire. Le type VARCHAR dans AnalyticDB for MySQL est équivalent aux types CHAR, VARCHAR, TEXT, MEDIUMTEXT et LONGTEXT de MySQL. Il n'y a aucune différence fonctionnelle entre eux.

Si j'ajoute une colonne AUTO_INCREMENT à une table contenant déjà des données, les lignes historiques seront-elles renseignées ?

Non. Seules les lignes nouvellement insérées auront des valeurs auto-incrémentées. Pour remplir les lignes historiques, créez une nouvelle table incluant la colonne AUTO_INCREMENT et migrez-y les données.

Puis-je modifier la clé de distribution ou la clé de partitionnement ?

Non. AnalyticDB for MySQL ne prend pas en charge l'ajout, la suppression ou la modification des clés de distribution ou de partitionnement. Pour les modifier, créez une nouvelle table et migrez vos données :

  1. Créez une nouvelle table avec la clé de distribution souhaitée. Exemple : Modifiez la clé de distribution de la table order de order_id à customer_id.

    CREATE TABLE order_auto_opt_v1 (
      order_id bigint NOT NULL COMMENT 'Order ID',
      customer_id bigint NOT NULL COMMENT 'Customer ID',
      customer_name varchar NOT NULL COMMENT 'Customer name',
      order_time timestamp NOT NULL COMMENT 'Order time',
      --Other fields are omitted.
      PRIMARY KEY (order_id,customer_id,order_time) --The distribution key customer_id and the partition key order_time must be in the primary key.
    )
    DISTRIBUTED BY HASH(customer_id)
    PARTITION BY VALUE(DATE_FORMAT(order_time, '%Y%m%d')) LIFECYCLE 90
    COMMENT 'Order information table';
  2. Importez les données depuis la table source en utilisant INSERT OVERWRITE SELECT. Pour plus d'informations, consultez la section INSERT OVERWRITE SELECT.

    INSERT OVERWRITE order_auto_opt_v1
    SELECT * FROM order;
  3. Vérifiez l'absence de skew des données. Après l'importation, assurez-vous que la nouvelle clé de distribution ne provoque pas de skew. Pour plus d'informations, consultez la section Diagnostic du stockage.

  4. Renommez la table source pour la sauvegarder.

    RENAME TABLE order TO order_backup;
  5. Renommez la nouvelle table avec le nom d'origine.

    RENAME TABLE order_auto_opt_v1 TO order;

Puis-je ajouter ou modifier une clé primaire ?

Non. Les opérations suivantes sur les clés primaires ne sont pas prises en charge :

  • Ajout ou suppression d'une clé primaire

  • Conversion d'une table sans clé primaire en table avec clé primaire, ou vice versa

  • Ajout ou suppression de colonnes de clé primaire

  • Renommage d'une colonne de clé primaire

  • Modification du type de données d'une colonne de clé primaire

Pourquoi ma modification de cycle de vie ou de politique de stockage hiérarchisé n'a-t-elle pas pris effet ?

La modification prend effet uniquement après le déclenchement et la fin d'une tâche BUILD pour la table. Exécutez SHOW CREATE TABLE db_name.table_name; pour confirmer que les nouveaux paramètres sont actifs.

Dépannage

syntax error, error in: 'DISTRIBUTE BY HASH(id) PARTITION BY VAL...'

La clé primaire, la clé de partitionnement et la clé de distribution ne peuvent pas être modifiées après la création d'une table. Pour effectuer de telles modifications, créez une nouvelle table et migrez les données.

Do not allow concurrent add cluster/zorder index task

Un message d'erreur complet ressemble à ceci :

Do not allow concurrent add cluster/zorder index task, which in progress: {"clusterColumnIds":[2],"clusterColumns":["phone_num"],"clusterIndexName":"index1","indexOptions":"ASC","type":"ADD_CLUSTERING_KEY"}

Cause : Vous avez exécuté ALTER TABLE ... ADD CLUSTERED KEY, mais la tâche BUILD qui rend l'index effectif n'est pas encore terminée. La tentative d'ajout d'un autre index clusterisé avant que le premier ne prenne effet déclenche cette erreur.

Solution : Attendez que la tâche BUILD s'exécute automatiquement, ou déclenchez-la manuellement. Une fois la tâche BUILD terminée et l'index clusterisé effectif, supprimez l'index existant et ajoutez-en un nouveau pour le modifier.

Pour vérifier l'état de la tâche BUILD :

SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;