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 SELECTsobrescribe ú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 SELECTborra 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.
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.
-
Cree una tabla de origen llamada
test_sourcey una tabla destino llamadatest_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; -
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
-
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 | +-----+------+ -
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_targetdevuelve:+-----+------+ |2 |1 | |1 |2 | |1 |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_targetdevuelve:+-----+------+ |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;
/* 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.