INSERT OVERWRITE SELECT oferece gravação de dados em lote de alto desempenho para tabelas do AnalyticDB for MySQL. O comando limpa os dados da partição e grava novos dados em massa.
Como funciona
A instrução INSERT OVERWRITE SELECT limpa primeiro todos os dados existentes de uma partição e, em seguida, grava novos dados nela em lotes.
Se a tabela de destino for particionada,
INSERT OVERWRITE SELECTsubstitui apenas as partições às quais os novos dados pertencem. As demais partições permanecem inalteradas.Caso a tabela de destino não seja particionada,
INSERT OVERWRITE SELECTremove todos os dados existentes na tabela e grava os novos dados em lotes.
Os jobs de gravação para uma única tabela são executados sequencialmente (a concorrência é fixa em 1). A concorrência padrão de gravação no nível do cluster é 2. Não altere esse valor, pois isso pode degradar o desempenho e sobrecarregar o cluster.
Para ajustar a concorrência de gravação, Envie um ticket ao suporte técnico para avaliação.
Visualize
Principais características:
Alto consumo de recursos: Execute fora dos horários de pico para evitar impactos no desempenho do cluster.
Visibilidade em lote: Os dados gravados tornam-se visíveis simultaneamente somente após a conclusão do job.
Substituição de partição: Apenas as partições com novos dados são substituídas.
Construção automática de índices: Os índices são criados sincronamente durante a gravação. Assim, a tabela de destino fica pronta para consultas imediatamente após o término do job.
Casos de uso comuns:
Gravação de dados no nível de partição.
Inicialização de dados (gravação completa).
Gravação de grandes volumes de dados em massa. Não recomendado para pequenos volumes.
Precauções
Não utilize INSERT OVERWRITE SELECT juntamente com métodos de gravação em tempo real (como INSERT INTO, REPLACE INTO, DELETE e UPDATE) para gravar na mesma tabela simultaneamente. Caso contrário, os dados das gravações em tempo real serão perdidos.
Sintaxe
INSERT OVERWRITE table_name (column_name[,...])
select_statement
Parâmetros
table_name: Nome da tabela de destino.column_name: Nome de uma coluna na tabela de destino.-
select_statement: Instrução SELECT.O tipo de dados de cada coluna na instrução SELECT deve corresponder ao tipo de dados da coluna respectiva na tabela de destino.
Se o número de colunas na instrução SELECT for maior que o da tabela de destino, a operação de gravação falhará. Se for menor, as colunas restantes na tabela de destino serão preenchidas com seus valores padrão. Caso uma coluna não possua valor padrão, o sistema a preencherá com NULL.
Exemplos
Dados de amostra
Prepare as tabelas de teste e os dados para os exemplos de substituição.
-
Crie uma tabela de source chamada
test_sourcee uma tabela de destino chamadatest_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; -
Grave dados de teste na tabela de source
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);
Substituir dados
-
Insira dados iniciais na tabela
test_target.INSERT OVERWRITE test_target SELECT * FROM test_source WHERE a = 1;Consulte a tabela
test_target. A consulta retorna o seguinte resultado:+-----+------+ |1 |1 | |1 |2 | |1 |3 | +-----+------+ -
Substitua a partição onde b=1 na tabela
test_target.INSERT OVERWRITE test_target (a,b) SELECT a,b FROM test_source WHERE a = 2 AND b = 1;Após a substituição, a consulta a
test_targetretorna:+-----+------+ |2 |1 | |1 |2 | |1 |3 | +-----+------+ -
Substitua as partições onde b=2 e b=3 na tabela
test_target.INSERT OVERWRITE test_target SELECT * FROM test_source WHERE a = 2 AND b >= 2 AND b <= 3;Após a substituição, a consulta a
test_targetretorna:+-----+------+ |2 |1 | |2 |2 | |2 |3 | +-----+------+
Gravações assíncronas
Envie um job
SUBMIT JOB executa a operação de gravação de forma assíncrona em segundo plano:
SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;
Otimize o desempenho de gravação
Adicione a dica /* direct_batch_load=true */ antes da operação de gravação para melhorar o desempenho com menor consumo de recursos:
/* direct_batch_load=true*/
SUBMIT JOB
INSERT OVERWRITE adb_table
SELECT * FROM adb_external_table;
/* direct_batch_load=true*/ requer a versão de kernel 3.1.5 ou posterior. Se o desempenho não melhorar, Envie um ticket para obter assistência. Para verificar sua versão de kernel, consulte Visualize informações da versão da instância.
Consulte o progresso do job
SUBMIT JOB retorna um job_id. Use-o para consultar o status do job:
SHOW JOB STATUS WHERE job='<job_id>';
O status SUCCEEDED indica que o job foi concluído.