Todos los productos
Search
Centro de documentos

:INSERT OVERWRITE SELECT

Última actualización: Sep 04, 2026

INSERT OVERWRITE SELECT permite realizar escrituras de datos por lotes de alto rendimiento en tablas de AnalyticDB for MySQL. Para ello, elimina los datos de la partición y escribe la nueva información de forma masiva.

Funcionamiento

La instrucción INSERT OVERWRITE SELECT primero borra todos los datos existentes en una partición y después escribe los nuevos datos en lotes.

  • Si la tabla destino está particionada, INSERT OVERWRITE SELECT sobrescribe únicamente las particiones a las que pertenecen los nuevos datos. Las demás particiones no se ven afectadas.

  • Si la tabla destino no está particionada, INSERT OVERWRITE SELECT borra todos los datos existentes en la tabla y luego escribe los nuevos datos en lotes.

Los trabajos de escritura para una sola tabla se ejecutan de forma secuencial (la concurrencia es fija en 1). La concurrencia de escritura predeterminada a nivel de clúster es 2. No ajuste este valor, ya que podría degradar el rendimiento y sobrecargar el clúster.

Nota

Para ajustar la concurrencia de escritura, Submit a ticket al soporte técnico para solicitar una evaluación.

Descripción general

Características principales:

  • Alto consumo de recursos: Ejecute esta operación fuera del horario pico para evitar afectar el rendimiento del clúster.

  • Visibilidad por lotes: Los datos escritos solo se hacen visibles en su totalidad una vez que finaliza el trabajo.

  • Sobrescritura de particiones: Solo se sobrescriben las particiones que contienen datos nuevos.

  • Creación automática de índices: Los índices se generan de forma síncrona durante la escritura, por lo que la tabla destino queda lista para consultas inmediatamente después de finalizar el trabajo.

Casos de uso comunes:

  • Escritura de datos a nivel de partición.

  • Inicialización de datos (escritura completa).

  • Escritura masiva de grandes volúmenes de datos. No se recomienda para volúmenes pequeños.

Precauciones

No utilice INSERT OVERWRITE SELECT junto con métodos de escritura en tiempo real (como INSERT INTO, REPLACE INTO, DELETE y UPDATE) para escribir en la misma tabla de forma simultánea. De lo contrario, se perderán los datos de las escrituras en tiempo real.

Sintaxis

INSERT OVERWRITE table_name (column_name[,...])
select_statement

Parámetros

  • table_name: Nombre de la tabla destino.

  • column_name: Nombre de una columna en la tabla destino.

  • select_statement: Instrucción SELECT.

    El tipo de dato de cada columna en la instrucción SELECT debe coincidir con el tipo de dato de la columna correspondiente en la tabla destino.

    Si el número de columnas en la instrucción SELECT es mayor que el de la tabla destino, la operación de escritura fallará. Si el número de columnas en la instrucción SELECT es menor que el de la tabla destino, las columnas restantes se llenarán con sus valores predeterminados. Si una columna no tiene un valor predeterminado, el sistema la llenará con NULL.

Ejemplos

Datos de muestra

Prepare las tablas y los datos de prueba para los ejemplos de sobrescritura.

  1. Cree una tabla de origen llamada test_source y una tabla destino llamada test_target.

    CREATE TABLE test_source (a BIGINT, b BIGINT) 
    DISTRIBUTED BY HASH(a);
    CREATE TABLE test_target (a BIGINT, b BIGINT) 
    DISTRIBUTED BY HASH(a) 
    PARTITION BY VALUE(b) LIFECYCLE 10;
  2. Escriba datos de prueba en la tabla de origen test_source.

    INSERT INTO test_source VALUES (1,1);  
    INSERT INTO test_source VALUES (1,2); 
    INSERT INTO test_source VALUES (1,3);  
    INSERT INTO test_source VALUES (2,1); 
    INSERT INTO test_source VALUES (2,2); 
    INSERT INTO test_source VALUES (2,3);

Sobrescribir datos

  1. Inserte datos iniciales en la tabla test_target.

    INSERT OVERWRITE test_target 
    SELECT * FROM test_source WHERE a = 1;

    Consulte la tabla test_target. La consulta devuelve el siguiente resultado.

    +-----+------+
    |1    |1     |
    |1    |2     |
    |1    |3     |
    +-----+------+
  2. Sobrescriba la partición donde b=1 en la tabla test_target.

    INSERT OVERWRITE test_target (a,b)
    SELECT a,b FROM test_source 
    WHERE a = 2 AND b = 1;

    Después de la sobrescritura, la consulta a test_target devuelve:

    +-----+------+
    |2    |1     |
    |1    |2     |
    |1    |3     |
    +-----+------+
  3. Sobrescriba las particiones donde b=2 y b=3 en la tabla test_target.

    INSERT OVERWRITE test_target
    SELECT * FROM test_source 
    WHERE a = 2 AND b >= 2 AND b <= 3;

    Después de la sobrescritura, la consulta a test_target devuelve:

    +-----+------+
    |2    |1     |
    |2    |2     |
    |2    |3     |
    +-----+------+

Escrituras asíncronas

Enviar un trabajo

SUBMIT JOB ejecuta la operación de escritura de forma asíncrona en segundo plano:

SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;

Optimizar el rendimiento de escritura

Agregue el hint /* direct_batch_load=true */ antes de la operación de escritura para mejorar el rendimiento con un menor consumo de recursos:

/* direct_batch_load=true*/
SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;
Nota

/* direct_batch_load=true*/ requiere la versión del kernel 3.1.5 o posterior. Si el rendimiento no mejora, Submit a ticket para obtener asistencia. Para comprobar su versión del kernel, consulte View instance version information.

Consultar el progreso del trabajo

SUBMIT JOB devuelve un job_id. Úselo para consultar el estado del trabajo:

SHOW JOB STATUS WHERE job='<job_id>';

Un estado SUCCEEDED indica que el trabajo ha finalizado.