Usar o utilitário BCP do Linux para importar e exportar dados - Amazon Relational Database Service

Usar o utilitário BCP do Linux para importar e exportar dados

O utilitário BCP (Bulk Copy Program) oferece uma maneira eficiente de transferir grandes quantidades de dados entre a instância de banco de dados do RDS para SQL Server e os arquivos de dados. Você pode usar o BCP em ambientes Linux para realizar operações de dados em massa, o que o torna útil para migração de dados, processos de ETL e transferências regulares de dados.

O BCP permite a importação de dados de arquivos para tabelas do SQL Server e a exportação de dados de tabelas do SQL Server para arquivos. Isso é particularmente eficaz para transferir dados estruturados em vários formatos, inclusive arquivos de texto delimitados.

Pré-requisitos

Antes de usar o BCP com uma instância de banco de dados do RDS para SQL Server usando o Linux, verifique se você tem o seguinte:

  • Um ambiente Linux com conectividade de rede à instância de banco de dados do RDS para SQL Server.

  • Ferramentas de linha de comandos do Microsoft SQL Server instaladas no sistema Linux, como:

    • sqlcmd: ferramenta de consulta de linha de comandos do SQL Server

    • bcp: utilitário Bulk Copy Program

  • Credenciais válidas para a instância de banco de dados do RDS para SQL Server.

  • Acesso à rede configurado por meio de grupos de segurança para permitir conexões na porta do SQL Server (normalmente 1433).

  • Permissões de banco de dados apropriadas para as operações que você deseja realizar.

Instalar ferramentas de linha de comandos do SQL Server no Linux

Para usar o BCP no Linux, você precisa instalar as ferramentas de linha de comandos do Microsoft SQL Server. Para obter instruções detalhadas sobre instalação para sua distribuição Linux específica, consulte a seguinte documentação da Microsoft:

Após a instalação, confirme se as ferramentas estão disponíveis em seu PATH executando:

bcp -v sqlcmd -?

Exportar dados do RDS para SQL Server

Você pode usar o BCP para exportar dados da instância de banco de dados do RDS para SQL Server para arquivos no sistema Linux. Isso é útil para criar backups, analisar dados ou preparar dados para migração.

Sintaxe básica de exportação

A sintaxe básica para exportar dados usando o BCP é:

bcp database.schema.table out output_file -S server_name -U username -P password [options]

Em que:

  • database.schema.table: o nome totalmente qualificado da tabela.

  • output_file: o caminho e o nome do arquivo de saída.

  • server_name: o endpoint do RDS para SQL Server.

  • username: o nome de usuário do banco de dados.

  • password: a senha do banco de dados.

Exemplo de exportação

O seguinte exemplo exporta dados de uma tabela denominada customers no banco de dados sales:

bcp sales.dbo.customers out /home/user/customers.txt \ -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \ -U admin \ -P mypassword \ -c \ -t "|" \ -r "\n"

Esse comando:

  • Exporta dados da tabela customers.

  • Salva a saída de /home/user/customers.txt.

  • Usa o formato de caracteres (-c).

  • Usa pipe (|) como delimitador de campo (-t "|").

  • Usa nova linha como delimitador de linha (-r "\n").

Importar dados para o RDS para SQL Server

Você pode usar o BCP para exportar dados de arquivos em seu sistema Linux para sua instância de banco de dados do RDS para SQL Server. Isso é útil para migração de dados, carregamento de dados de teste ou atualizações regulares de dados.

Sintaxe básica de importação

A sintaxe básica para exportar dados usando o BCP é:

bcp database.schema.table in input_file -S server_name -U username -P password [options]

Em que:

  • database.schema.table: o nome totalmente qualificado da tabela de destino.

  • input_file: o caminho e o nome do arquivo de entrada.

  • server_name: o endpoint do RDS para SQL Server.

  • username: o nome de usuário do banco de dados.

  • password: a senha do banco de dados.

Exemplo de importação

O seguinte exemplo importa dados de um arquivo para uma tabela denominada customers:

bcp sales.dbo.customers in /home/user/customers.txt \ -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \ -U admin \ -P mypassword \ -c \ -t "|" \ -r "\n" \ -b 1000

Esse comando:

  • Importa dados para a tabela customers.

  • Lê os dados do /home/user/customers.txt

  • Usa o formato de caracteres (-c).

  • Usa pipe (|) como delimitador de campo (-t "|").

  • Usa nova linha como delimitador de linha (-r "\n").

  • Processa dados em lotes de mil linhas (-b 1000).

Opções comuns do BCP

O BCP oferece várias opções para controlar a formatação de dados e o comportamento de transferência. A seguinte tabela descreve as opções comumente usadas:

Opção Descrição
-c Usa o tipo de dados de caracteres para todas as colunas.
-n Usa tipos de dados de banco de dados nativos.
-t Especifica o delimitador de campo (o padrão é tab).
-r Especifica o delimitador de linha (o padrão é nova linha).
-b Especifica o tamanho do lote para operações em massa.
-F Especifica a primeira linha a ser exportada ou importada.
-L Especifica a última linha a ser exportada ou importada.
-e Especifica um arquivo de erro para capturar linhas rejeitadas.
-f Especifica um arquivo de formato para formatação de dados.
-q Usa identificadores entre aspas para nomes de objeto.

Práticas recomendadas e considerações

Ao usar o BCP com o RDS para SQL Server no Linux, considere as seguintes práticas recomendadas:

  • Use o processamento em lote: para grandes conjuntos de dados, use a opção -b para processar dados em lote. Isso melhora o desempenho e permite uma recuperação de erros mais apropriada.

  • Lide com erros adequadamente: use a opção -e para capturar informações de erros e linhas rejeitadas em um arquivo separado para análise.

  • Escolha os formatos de dados apropriados: use o formato de caracteres (-c) para compatibilidade entre plataformas ou o formato nativo (-n) para melhorar desempenho quando a origem e o destino forem o SQL Server.

  • Proteja suas credenciais: evite colocar senhas diretamente nas linhas de comandos. Considere a possibilidade de usar variáveis de ambiente ou arquivos de configuração com as permissões apropriadas.

  • Teste com conjuntos de dados pequenos: antes de processar grandes quantidades de dados, teste seus comandos do BCP com conjuntos de dados menores para verificar a formatação e a conectividade.

  • Monitore a conectividade de rede: garanta conexões de rede estáveis, especialmente para grandes transferências de dados. Considere a possibilidade de usar ferramentas como screen ou tmux para operações de longa duração.

  • Valide a integridade dos dados: após a transferência de dados, verifique as contagens de linhas e os dados de amostra para garantir que a operação foi concluída com êxito.

Solução de problemas comuns do

A seguinte tabela descreve os problemas comuns que você pode encontrar ao usar o BCP no Linux e as respectivas soluções:

Problema Solução
Tempo limite de conexão ou erros de rede Verifique seu endpoint do Amazon RDS, as configurações do grupo de segurança e a conectividade de rede. Confirme se a porta do SQL Server (normalmente 1433) pode ser acessada pelo seu sistema Linux.
Falhas de autenticação Anote seu nome de usuário e senha. Verifique se o usuário do banco de dados tem as permissões apropriadas para as operações que você está executando.
Erros de formato de dados Verifique seus delimitadores de campo e linha. Confirme se o formato dos dados corresponde ao que o BCP espera. Use arquivos de formato para estruturas de dados complexas.
Erros de permissão negada Verifique se o usuário do banco de dados tem permissões INSERT para importações ou permissões SELECT para exportações nas tabelas de destino.
Problemas de tratamento de arquivos grandes Use o processamento em lote com a opção -b. Considere a possibilidade de dividir arquivos grandes em partes menores para melhorar o desempenho e a recuperação de erros.
Problemas de codificação de caracteres Garanta que seus arquivos de dados usem uma codificação de caracteres compatível. Use a opção -c para o formato de caracteres ou especifique as páginas de código apropriadas.