Todos los productos
Search
Centro de documentos

:ALTER TABLE

Última actualización: Sep 23, 2026

ALTER TABLE modifica el esquema de una tabla existente en AnalyticDB for MySQL. Con este comando se renombran tablas y columnas, se cambian los tipos de datos y las restricciones de las columnas, se gestionan índices, se ajustan los ciclos de vida de las particiones y se configuran políticas de almacenamiento por niveles.

Tabla de ejemplo

La mayoría de los ejemplos de este tema utilizan la tabla customer. Si aún no la ha creado, ejecute la siguiente instrucción:

Instrucción de ejemplo para crear la tabla

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

Los ejemplos de índices JSON, claves externas e índices vectoriales usan sus propias definiciones de tabla.

Sintaxis

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}

Tablas

Renombrar una tabla

ALTER TABLE db_name.table_name RENAME new_table_name

Ejemplo: Cambie el nombre de customer a new_customer.

ALTER TABLE customer RENAME new_customer;

Modificar el comentario de una tabla

ALTER TABLE db_name.table_name COMMENT 'comment'

Ejemplo: Actualice el comentario de la tabla customer.

ALTER TABLE customer COMMENT 'Customer table';

Columnas

Agregar una columna

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'],...)}
No es posible agregar columnas de clave primaria.

Ejemplo 1: Agregue una columna province de tipo VARCHAR a customer.

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

Example 2: Agregue dos columnas al mismo tiempo: vip de tipo BOOLEAN y tags de tipo VARCHAR.

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

Eliminar una columna

ALTER TABLE db_name.table_name DROP [COLUMN] column_name
No es posible eliminar columnas de clave primaria.

Ejemplo: Elimine la columna province de customer.

ALTER TABLE adb_demo.customer DROP COLUMN province;

Renombrar una columna

ALTER TABLE db_name.table_name RENAME COLUMN column_name TO new_column_name
No es posible renombrar columnas de clave primaria.

Ejemplo: Cambie el nombre de city_name a city en customer.

ALTER TABLE customer RENAME COLUMN city_name TO city;

Cambiar el tipo de datos de una columna

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name new_column_type

Los cambios de tipo de datos siguen reglas de ampliación: puede expandir el rango de un tipo, pero no reducirlo. La siguiente tabla resume los cambios compatibles:

Cambio

Compatible

De un entero menor a uno mayor (por ejemplo, de TINYINT a BIGINT)

Sí

De un entero mayor a uno menor (por ejemplo, de BIGINT a TINYINT)

No

De FLOAT a DOUBLE

Sí

De DOUBLE a FLOAT

No

De un tipo entero a un tipo de punto flotante (FLOAT o DOUBLE)

Sí (aplica un requisito de versión)

Aumentar la precisión de DECIMAL

Sí (aplica un requisito de versión)

Reducir la precisión de DECIMAL

No

Cambio del tipo de datos de una columna de clave primaria

No

Importante

Cambiar un tipo entero a uno de punto flotante y aumentar la precisión de DECIMAL requiere un clúster con versión de kernel 3.1.8.10–3.1.8.x, 3.1.9.6–3.1.9.x, 3.1.10.3–3.1.10.x o 3.2.0.1 y posteriores.

Ejemplo: Cambie la columna age de INT a BIGINT.

ALTER TABLE adb_demo.customer MODIFY COLUMN age BIGINT;

Cambiar el valor predeterminado de una columna

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

Ejemplo 1: Establezca el valor predeterminado de sex como 0.

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

Ejemplo 2: Establezca el valor predeterminado de login_time como CURRENT_TIMESTAMP.

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

Permitir valores NULL

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type NULL
Solo se admiten cambios de NOT NULL a NULL. No es posible cambiar de NULL a NOT NULL.

Ejemplo: Permita que province acepte valores NULL.

ALTER TABLE adb_demo.customer MODIFY COLUMN province VARCHAR NULL;

Modificar el comentario de una columna

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

Ejemplo: Actualice el comentario de la columna province.

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

Índices

Agregar un índice normal

De forma predeterminada, las tablas XUANWU_V2 se crean sin índices de todas las columnas (INDEX_ALL='N'), mientras que las tablas XUANWU sí los incluyen (INDEX_ALL='Y'). Agregue un índice a columnas específicas según lo requiera.

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

La columna debe tener un tipo de datos simple. Para columnas JSON, consulte Agregar un índice JSON.

Ejemplo: Agregue un índice a la columna age.

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

Modificar índices de todas las columnas

En las tablas XUANWU_V2, active o desactive la indexación de todas las columnas después de crear la tabla mediante la propiedad INDEX_ALL. Esta configuración no afecta los índices JSON, de texto completo ni vectoriales.

Requisitos previos

La tabla XUANWU_V2 debe estar en un clúster con versión de kernel 3.2.3.7 o posterior, o bien 3.2.4.3 o posterior.

Para consultar y actualizar la versión secundaria de su clúster, inicie sesión en la consola de AnalyticDB for MySQL y vaya a la sección Configuration Information de la página Cluster Information.
ALTER TABLE db_name.table_name INDEX_ALL = {'Y'|'N'};

Valor

Efecto

Y

Modo de índice de todas las columnas: crea índices normales para todas las columnas.

N

Modo sin índice de todas las columnas: conserva solo el índice de clave primaria y elimina todos los demás índices normales.

Notas de uso:

  • En las tablas XUANWU, la indexación de todas las columnas solo se configura al momento de crear la tabla. Para deshabilitarla, elimine los índices de forma individual.

  • Si INDEX_ALL='Y' y usted elimina un índice normal mediante una instrucción de lenguaje de definición de datos (DDL), la propiedad cambia automáticamente a INDEX_ALL='N'. Solo se quita el índice indicado; los demás no se ven afectados.

  • Cuando INDEX_ALL='N', es posible que SHOW CREATE TABLE no muestre esta propiedad de manera explícita, aunque sigue vigente.

Ejemplo 1: Deshabilite la indexación de todas las columnas en customer (actualmente con INDEX_ALL='Y').

ALTER TABLE adb_demo.customer INDEX_ALL = 'N';

Tras la ejecución, se eliminan los índices normales de las columnas que no son de clave primaria, como customer_name, city_name y sex.

Ejemplo 2: Habilite la indexación de todas las columnas en customer (actualmente con INDEX_ALL='N' e índices existentes en customer_id, phone_num y login_time).

ALTER TABLE adb_demo.customer INDEX_ALL = 'Y';

Después de la ejecución, se crean índices normales para todas las columnas que aún no cuentan con uno, como customer_name, city_name y sex.

Agregar un índice JSON

Notas de uso

El comportamiento de los índices JSON varía según el motor de la tabla:

  • Tablas XUANWU_V2 (particionadas y no particionadas): el índice entra en vigor de inmediato, sin necesidad de un trabajo BUILD.

  • Tablas XUANWU no particionadas: el índice entra en vigor únicamente cuando finaliza un trabajo BUILD.

  • Tablas XUANWU particionadas: desencadene manualmente un full-table BUILD job. El índice entra en vigor solo después de que termine el trabajo BUILD.

Índices JSON

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

Parámetro

Descripción

column_name

Crea un índice en una columna JSON. La columna debe ser de tipo JSON.

column_name->'$.json_path'

Crea un índice en una clave de propiedad específica dentro de un objeto JSON. Para más información, consulte Índices JSON.

Importante
  • La sintaxis column_name->'$.json_path' requiere la versión V3.1.6.8 o posterior del clúster. Para consultar y actualizar la versión secundaria, inicie sesión en la consola de AnalyticDB for MySQL y vaya a la sección Configuration Information de la página Cluster Information.

  • Si una columna JSON ya tiene un índice, elimínelo antes de crear uno sobre una clave de propiedad de esa misma columna.

Ejemplo: Cree un índice JSON en la propiedad a de la columna 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');

Índices de arreglos JSON

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

column_name->'$[*]' especifica la columna de arreglo JSON que se va a indexar. Por ejemplo, vj->'$[*]' crea un índice de arreglo JSON en la columna vj.

Ejemplo: Cree un índice de arreglo JSON en la columna 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->'$[*]');

Eliminar un índice normal o JSON

ALTER TABLE db_name.table_name DROP KEY index_name

Ejecute SHOW INDEX FROM db_name.table_name; para obtener el nombre del índice.

Ejemplo 1: Elimine el índice age_idx de customer.

ALTER TABLE adb_demo.customer DROP KEY age_idx;

Ejemplo 2: Elimine el índice de arreglo JSON index_vj de json_test.

ALTER TABLE adb_demo.customer DROP KEY index_vj;

Agregar un índice agrupado

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

Notas de uso:

  • Los índices agrupados ordenan de forma ascendente (ASC) de manera predeterminada. Para cargas de trabajo que requieren orden descendente, establezca DESC al crear la tabla.

  • Una tabla solo admite un índice agrupado.

  • Después de agregar un índice agrupado, desencadene y complete un trabajo BUILD para que entre en vigor. Ejecute SHOW CREATE TABLE db_name.table_name; para confirmarlo.

Ejemplo: Agregue un índice agrupado en customer_id.

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

Eliminar un índice agrupado

ALTER TABLE db_name.table_name DROP CLUSTERED KEY index_name

Ejecute SHOW CREATE TABLE db_name.table_name para obtener el nombre del índice agrupado.

Ejemplo: Elimine el índice agrupado llamado index de customer.

ALTER TABLE adb_demo.customer DROP CLUSTERED KEY index;

Agregar un índice de texto completo

Requisitos previos

Un clúster de AnalyticDB for MySQL con versión V3.1.4.9 o posterior. Para obtener mejores resultados, utilice la versión V3.1.4.17 o posterior.

Para obtener información sobre cómo consultar la versión secundaria, consulte ¿Cómo consulto la versión de un clúster de AnalyticDB for MySQL?
ALTER TABLE db_name.table_name ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]

Parámetro

Descripción

column_name

La columna que se va a indexar. Debe ser de tipo VARCHAR.

index_option

Opcional. Especifica el tokenizer y el diccionario personalizado.

WITH ANALYZER analyzer_name

El analizador para el índice de texto completo. Consulte Analizadores para índices de texto completo.

WITH DICT tbl_dict_name

El diccionario personalizado para el índice de texto completo. Consulte Diccionarios personalizados para índices de texto completo.

Importante

Un índice de texto completo entra en vigor únicamente después de desencadenar y completar un trabajo BUILD.

Ejemplo: Agregue un índice de texto completo a la columna home_address con el analizador standard.

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

Para más información, consulte Crear un índice de texto completo.

Eliminar un índice de texto completo

ALTER TABLE db_name.table_name DROP FULLTEXT INDEX index_name

Ejemplo: Elimine el índice de texto completo fidx_k de customer.

ALTER TABLE adb_demo.customer DROP FULLTEXT INDEX fidx_k;

Agregar un índice vectorial

Requisitos previos

Un clúster de AnalyticDB for MySQL con versión V3.1.4.0 o posterior. Versiones secundarias recomendadas: 3.1.5.16, 3.1.6.8, 3.1.8.6 y posteriores.

Si su clúster no utiliza una de las versiones recomendadas, configure CSTORE_PROJECT_PUSH_DOWN y CSTORE_PPD_TOP_N_ENABLE como false antes de usar la búsqueda vectorial. Para actualizar la versión secundaria, póngase en contacto con el soporte técnico. Para obtener información sobre cómo consultar la versión secundaria, consulte ¿Cómo consulto la versión de un clúster de AnalyticDB for MySQL?
ALTER TABLE db_name.table_name ADD ANN [INDEX|KEY] [index_name] (column_name) [algorithm=HNSW_PQ] [distancemeasure=SquaredL2]

Parámetro

Descripción

index_name

El nombre del índice. Para conocer las convenciones de nomenclatura, consulte la sección Límites de nomenclatura.

column_name

La columna vectorial que se va a indexar. El tipo de la columna debe ser array<float>, array<byte> o array<smallint>.

algorithm

El algoritmo utilizado para calcular la distancia vectorial. Establézcalo como HNSW_PQ.

distancemeasure

La fórmula de distancia. Establézcala como SquaredL2. Fórmula: (x1-y1)^2 + (x2-y2)^2 + ... + (xn-yn)^2.

Ejemplo: Cree índices vectoriales en las columnas float_feature y 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);

Agregar una clave externa

Requisitos previos

Un clúster de AnalyticDB for MySQL con versión V3.1.10 o posterior.

Para consultar y actualizar la versión secundaria, inicie sesión en la consola de AnalyticDB for MySQL y vaya a la sección Configuration Information de la página 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)

Parámetro

Descripción

db_name.table_name

La tabla a la que se agregará la clave externa.

symbol

Opcional. El nombre de la restricción de clave externa, que debe ser único dentro de la tabla. Si se omite, el analizador sintáctico usa <fk_column_name>_fk como nombre de la restricción.

fk_column_name

La columna de clave externa. Ya debe existir.

pk_table_name

La tabla principal. Ya debe existir.

pk_column_name

La columna de clave primaria de la tabla principal. Ya debe existir.

Notas de uso:

  • Una tabla admite varios índices de clave externa.

  • Un índice de clave externa no abarca varias columnas (por ejemplo, no se admite FOREIGN KEY (sr_item_sk, sr_ticket_number)).

  • AnalyticDB for MySQL no aplica restricciones de datos. Valide la relación de restricción entre las claves primarias y externas desde su aplicación.

  • No es posible agregar restricciones de clave externa a tablas externas.

Ejemplo: Agregue una clave externa en store_sales que haga referencia a la tabla 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);

Para más información, consulte Eliminate unnecessary joins using primary and foreign key constraints.

Eliminar una clave externa

ALTER TABLE db_name.table_name DROP FOREIGN KEY fk_symbol

Ejemplo:

ALTER TABLE store_returns DROP FOREIGN KEY sr_item_sk_fk;

Particiones

Cambiar el ciclo de vida de la partición

ALTER TABLE db_name.table_name PARTITIONS N

Notas de uso:

  • En clústeres con versión de kernel 3.2.4.1 o posterior, establezca N en 0 para quitar la gestión del ciclo de vida de las particiones.

  • El nuevo ciclo de vida entra en vigor únicamente después de desencadenar y completar un trabajo BUILD. Ejecute SHOW CREATE TABLE db_name.table_name; para comprobarlo.

Ejemplo 1: Quite el ciclo de vida de customer.

ALTER TABLE customer PARTITIONS 0;

Ejemplo 2: Cambie el ciclo de vida de 30 a 40 días.

ALTER TABLE customer PARTITIONS 40;

Eliminar una partición

ALTER TABLE DROP PARTITION tiene el mismo efecto que TRUNCATE TABLE PARTITION .
ALTER TABLE db_name.table_name DROP PARTITION (partition_name,...)
Aviso

Al eliminar una partición se borran permanentemente todos los datos que contiene. Esta acción no se puede deshacer.

Ejemplo 1: elimine la partición 20241220 de customer.

ALTER TABLE adb_demo.customer DROP PARTITION (20241220);

Ejemplo 2: elimine las particiones 20241218 y 20241219.

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

Políticas de almacenamiento

Modificar la política de almacenamiento por niveles

Requisitos previos

  • El clúster debe ser de edición Enterprise, Basic, Data Lakehouse o Data Warehouse (modo elástico).

  • Requisitos de versión del kernel:

    • Tablas XUANWU: sin restricción de versión del kernel.

    • Tablas XUANWU_V2: la versión del kernel debe ser 3.2.2.15 o posterior, 3.2.3.13 o posterior, 3.2.4.9 o posterior, o bien 3.2.5.3 o posterior.

Para consultar y actualizar la versión secundaria, inicie sesión en la consola de AnalyticDB for MySQL y vaya a la sección Configuration Information de la página Cluster Information .

En las tablas XUANWU_V2, la tarea programada para mover datos entre el almacenamiento activo e inactivo debe estar habilitada:

  • Compruebe el estado: SHOW ADB_CONFIG KEY=SERVERLESS_DATA_STORAGE_CHANGE_SCHEDULE_ENABLE;

    • Si el resultado es FALSE, la tarea está deshabilitada y debe habilitarla.

    • Si se devuelve un error, el parámetro no se ha configurado y su valor predeterminado es TRUE.

  • Habilite la tarea: 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 nueva política de almacenamiento surte efecto únicamente después de que se active y finalice un trabajo BUILD para la tabla. De forma predeterminada, este trabajo se ejecuta automáticamente en segundo plano. Antes de que termine el trabajo BUILD, la cantidad de particiones activas que reporta information_schema.table_usage podría diferir de la política configurada. Ejecute SHOW CREATE TABLE db_name.table_name; para confirmar que la política ya está vigente.

Ejemplo 1: establezca la política de almacenamiento en COLD.

ALTER TABLE customer storage_policy = 'COLD';

Ejemplo 2: establezca la política de almacenamiento en HOT.

ALTER TABLE customer storage_policy = 'HOT';

Ejemplo 3: establezca la política de almacenamiento en MIXED con 10 particiones activas.

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

Preguntas frecuentes

¿Es posible cambiar el orden de las columnas?

No. En AnalyticDB for MySQL no se puede modificar el orden de las columnas.

¿Cómo convierto una columna VARCHAR a LONGTEXT?

No se requiere ninguna conversión. El tipo VARCHAR de AnalyticDB for MySQL equivale a CHAR, VARCHAR, TEXT, MEDIUMTEXT y LONGTEXT de MySQL. No existe ninguna diferencia funcional entre ellos.

Si agrego una columna AUTO_INCREMENT a una tabla que ya contiene datos, ¿se llenan las filas históricas?

No. Solo las filas nuevas que se inserten tendrán valores autoincrementados. Para completar las filas históricas, cree una tabla nueva que incluya la columna AUTO_INCREMENT y migre los datos hacia ella.

¿Puedo modificar la clave de distribución o la clave de partición?

No. AnalyticDB for MySQL no admite agregar, eliminar ni modificar claves de distribución o de partición. Si necesita cambiarlas, cree una tabla nueva y migre sus datos:

  1. Cree una tabla nueva con la clave de distribución deseada. Ejemplo: cambie la clave de distribución de order de order_id a 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. Importe los datos de la tabla de origen mediante INSERT OVERWRITE SELECT. Para obtener más información, consulte INSERT OVERWRITE SELECT.

    INSERT OVERWRITE order_auto_opt_v1
    SELECT * FROM order;
  3. Revise si existe sesgo de datos. Después de la importación, compruebe que la nueva clave de distribución no genere sesgos. Para obtener más información, consulte Storage diagnostics.

  4. Cambie el nombre de la tabla de origen para conservarla como copia de seguridad.

    RENAME TABLE order TO order_backup;
  5. Asigne a la tabla nueva el nombre original.

    RENAME TABLE order_auto_opt_v1 TO order;

¿Es posible agregar o modificar una clave primaria?

No. Las siguientes operaciones con claves primarias no son compatibles:

  • Agregar o eliminar una clave primaria.

  • Convertir una tabla sin clave primaria en una con clave primaria, o viceversa.

  • Agregar o quitar columnas de la clave primaria.

  • Cambiar el nombre de una columna de la clave primaria.

  • Modificar el tipo de datos de una columna de la clave primaria.

¿Por qué no surtió efecto el cambio en mi ciclo de vida o en la política de almacenamiento por niveles?

El cambio surte efecto únicamente después de que se active y finalice un trabajo BUILD para la tabla. Ejecute SHOW CREATE TABLE db_name.table_name; para confirmar que la nueva configuración está activa.

Solución de problemas

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

La clave primaria, la clave de partición y la clave de distribución no se pueden modificar después de crear la tabla. Para aplicar estos cambios, create a new table y migre los datos.

Do not allow concurrent add cluster/zorder index task

Un mensaje de error completo luce de manera similar al siguiente:

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"}

Causa: ejecutó ALTER TABLE ... ADD CLUSTERED KEY, pero el trabajo BUILD que lo hace efectivo aún no termina. Este error se desencadena cuando intenta agregar otro índice agrupado antes de que el primero surta efecto.

Solución: espere a que BUILD job to run automatically o bien trigger one manually. Una vez que el trabajo BUILD termine y el índice agrupado surta efecto, elimine el índice existente y agregue uno nuevo para modificarlo.

Para revisar el estado del trabajo BUILD:

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