AnalyticDB for MySQL permite exportar dados do AnalyticDB for MySQL Data Warehouse Edition (V3.0) para o Object Storage Service (OSS) usando tabelas externas e a instrução INSERT INTO. Esse recurso de exportação suporta apenas os formatos de arquivo CSV e Parquet.
Pré-requisitos
-
Crie um diretório no Object Storage Service (OSS) para armazenar os dados do AnalyticDB for MySQL:
-
Nota
O bucket do OSS e o cluster do AnalyticDB for MySQL Data Warehouse Edition (V3.0) devem estar na mesma região.
-
Por exemplo, crie um diretório chamado
adb_data/no OSS. Os dados exportados do AnalyticDB for MySQL Data Warehouse Edition (V3.0) ficarão armazenados nesse diretório.
-
Crie um cluster Data Warehouse Edition (V3.0), configure sua lista de permissões e crie uma conta e um banco de dados. Para mais informações, consulte Início rápido do AnalyticDB for MySQL.
Se o cluster AnalyticDB for MySQL Data Warehouse Edition estiver no modo elástico, faça login no console do AnalyticDB for MySQL para ativar a rede ENI (Elastic Network Interface). No painel Network Information da instância, ative a opção ENI Network. A rede ENI deve estar habilitada para que instâncias no modo elástico importem dados usando tabelas externas.
Procedimento
Este exemplo exporta dados da tabela source_table do banco de dados adb_demo do AnalyticDB for MySQLData Warehouse Edition para a pasta adb_data no OSS.
Conecte-se ao cluster de destino e acesse o banco de dados de origem.
No banco de dados
adb_demo, crie uma tabela externa. Para mais informações, consulte Tabelas externas não particionadas do OSS.Execute uma instrução de escrita para copiar os dados de origem para a tabela externa criada anteriormente. Para obter detalhes sobre a sintaxe suportada para cada tipo de tabela externa, consulte Sintaxe para tabelas externas não particionadas e Sintaxe para tabelas externas particionadas.
Após a conclusão do job de escrita da Etapa 3, faça login no console do OSS para visualizar os arquivos de dados exportados na pasta de destino. Você também pode consultar diretamente, pelo AnalyticDB for MySQL, os dados exportados para a tabela externa.
Sintaxe para tabelas externas não particionadas
Ao usar INSERT INTO ou INSERT OVERWRITE SELECT para gravar dados, o job executa de forma síncrona por padrão. Se você precisar gravar um grande volume de dados, como centenas de gigabytes, a conexão entre o cliente e o servidor do AnalyticDB for MySQL pode atingir o tempo limite e causar falha no job. Por isso, ao lidar com grandes volumes de dados, recomendamos executar a instrução INSERT OVERWRITE SELECT de forma assíncrona, adicionando SUBMIT JOB antes da instrução. Exemplo: SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Para mais informações sobre o envio assíncrono de jobs, consulte envio assíncrono de jobs de importação.
Por padrão, os arquivos exportados para o OSS contêm apenas dados e não incluem cabeçalhos de coluna. Para exportar arquivos com cabeçalhos, adicione a dica /*+sql_output_oss_file_head_enable=true*/ antes da instrução.
-
Insert select from
-
Descrição: Se seus dados já existirem em outra tabela, use
INSERT SELECT FROMpara copiá-los para uma tabela externa. Essa instrução grava os dados da tabela de origem no local do OSS definido na tabela externa. Cada operação de escrita gera novos arquivos de dados no OSS.ImportanteÉ obrigatório gravar todas as colunas na tabela externa. Não é possível especificar apenas um subconjunto de colunas.
Sintaxe:
INSERT INTO table_name SELECT select_statement FROM from_statement;Exemplo:
insert into oss_table select col1, col2, col3 from source_table;
-
-
Insert overwrite select
-
Descrição: Use
INSERT OVERWRITE SELECTpara inserir dados em massa em uma tabela. Caso a tabela externa de destino já contenha dados, essa instrução exclui primeiro todos os arquivos existentes no caminho da tabela externa e, em seguida, gera novos arquivos de dados no OSS.ImportanteÉ obrigatório gravar todas as colunas na tabela externa. Não é possível especificar apenas um subconjunto de colunas.
Sintaxe:
INSERT OVERWRITE table_name SELECT select_statement FROM from_statement;Exemplo:
INSERT OVERWRITE oss_table SELECT col1, col2, col3 FROM source_table;
-
-
Replace select from
Descrição: Como tabelas externas do OSS não suportam chaves primárias,
REPLACE SELECT FROMcomporta-se de maneira idêntica aINSERT SELECT FROM. O comando copia dados para outra tabela, mantendo os dados existentes na tabela de destino inalterados e anexando os novos dados como arquivos adicionais no OSS.
-
Exportar para um único arquivo no OSS (apenas formato CSV; não suportado para Parquet)
-
Descrição: Use uma dica para exportar dados para um único arquivo específico no OSS. Se a palavra-chave
OVERWRITEestiver incluída, qualquer arquivo existente com o mesmo nome no diretório definido emTABLE_PROPERTIESda tabela externa será sobrescrito. Os demais arquivos do diretório permanecem intactos.ImportanteÉ obrigatório gravar todas as colunas na tabela externa. Não é possível especificar apenas um subconjunto de colunas.
Notas sobre versões:
Clusters do AnalyticDB for MySQL anteriores à V3.1.2: Este recurso não é suportado. O sistema gera automaticamente os nomes dos arquivos e exporta os dados em múltiplos arquivos. A quantidade de arquivos de destino é determinada dinamicamente pela concorrência do job.
Clusters do AnalyticDB for MySQL versão 3.1.2 ou posterior: Use uma dica para exportar tabelas externas regulares no formato CSV do AnalyticDB for MySQL para um único arquivo no OSS. Também é possível personalizar o nome do arquivo durante a exportação. Sem a dica, o comportamento segue o padrão das versões anteriores à 3.1.2, com os dados sendo exportados em vários arquivos.
Sintaxe:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] table_name SELECT select_statement FROM from_statement;Exemplo:
/*+output_filename=adb.txt*/INSERT [OVERWRITE] oss_table SELECT * FROM source_table;
-
Sintaxe para tabelas externas particionadas
Ao usar INSERT INTO ou INSERT OVERWRITE SELECT para gravar dados, o job executa de forma síncrona por padrão. Se você precisar gravar um grande volume de dados, como centenas de gigabytes, a conexão entre o cliente e o servidor do AnalyticDB for MySQL pode atingir o tempo limite e causar falha no job. Por isso, ao lidar com grandes volumes de dados, recomendamos executar a instrução INSERT OVERWRITE SELECT de forma assíncrona, adicionando SUBMIT JOB antes da instrução. Exemplo: SUBMIT JOB INSERT OVERWRITE adb_table SELECT * FROM oss_table;. Para mais informações sobre o envio assíncrono de jobs, consulte envio assíncrono de jobs de importação.
Por padrão, os arquivos exportados para o OSS contêm apenas dados e não incluem cabeçalhos de coluna. Para exportar arquivos com cabeçalhos, adicione a dica /*+sql_output_oss_file_head_enable=true*/ antes da instrução.
Ao gravar dados de uma tabela particionada, os arquivos de dados não incluem os valores das colunas de chave de partição. As informações de partição ficam armazenadas na estrutura de diretórios do OSS.
A exportação de dados de uma tabela externa particionada para um único arquivo no OSS não é suportada.
Por exemplo, considere uma tabela particionada com duas colunas de chave de partição e três colunas regulares. A chave de partição de primeiro nível é pcol1 com valor 1, e a chave de partição de segundo nível é pcol2 com valor a. Os dados dessa tabela são exportados para o caminho adb_data/ no OSS. Ao gravar dados na partição onde pcol1=1 e pcol2=a, o caminho relativo do arquivo de dados será adb_data/pcol1=1/pcol2=a/. Os arquivos CSV ou Parquet resultantes não conterão os valores de pcol1 e pcol2, apenas os valores das três colunas regulares.
Insert into partition select from
Função: O comando INSERT INTO PARTITION SELECT FROM insere dados em massa em uma tabela externa particionada. Durante a gravação, use a cláusula PARTITION para especificar todas as colunas e valores de partição. Alternativamente, especifique apenas os valores das partições de nível superior e permita que as partições de nível inferior sejam geradas dinamicamente. Também é possível omitir totalmente a cláusula PARTITION, o que gera dinamicamente todos os níveis de partição.
Os dados gravados são anexados à partição correspondente. Cada operação de escrita gera novos arquivos de dados no OSS.
É obrigatório gravar todas as colunas na tabela externa. Não é possível especificar apenas um subconjunto de colunas.
Partições totalmente estáticas
Sintaxe
INSERT INTO table_name PARTITION(par1=val1,par2=val2,...)
SELECT select_statement FROM from_statement;
Exemplo
INSERT INTO oss_table_par PARTITION(par1=val1,par2=val2)
select col1, col2, col3 FROM source_table;
Partições parcialmente estáticas e parcialmente dinâmicas
Sintaxe
INSERT INTO table_name PARTITION(par1=val1,par2,...)
SELECT select_statement FROM from_statement;
Exemplo
INSERT INTO oss_table_par PARTITION(par1=val1,par2)
SELECT col1, col2, col3, par2col FROM source_table;
Partições totalmente dinâmicas
Sintaxe
INSERT INTO table_name
SELECT select_statement FROM from_statement;
Exemplo
INSERT INTO oss_table_par
SELECT col1, col2, col3, par1col, par2col FROM source_table;
Insert overwrite partition select
Função: O uso é idêntico ao de INSERT INTO PARTITION SELECT. No entanto, este comando também exclui os arquivos de dados existentes nas partições de destino envolvidas na execução. Arquivos em partições que não recebem novos dados não são excluídos.
Sintaxe:
INSERT OVERWRITE table_name PARTITION(par1=val1,par2=val2,...)[IF NOT EXISTS]
SELECT select_statement FROM from_statement;
Exemplo:
INSERT OVERWRITE oss_table_par PARTITION(par1=val1,par2=val2) IF NOT EXISTS
SELECT col1, col2, col3 FROM source_table;
Replace into partition select from
Descrição: Como tabelas externas não suportam chaves primárias, REPLACE INTO PARTITION SELECT FROM comporta-se de maneira idêntica a INSERT INTO PARTITION SELECT FROM.
Sintaxe não suportada
As tabelas externas do AnalyticDB for MySQL não suportam sintaxe de escrita no nível de linha. Especificamente, as instruções INSERT INTO VALUES e REPLACE INTO VALUES não são suportadas.