Operações de Importação e Exportação no MySQL

MySQLBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá as habilidades essenciais de importação e exportação de dados em um banco de dados MySQL. Você praticará o carregamento de dados de um arquivo CSV (Comma-Separated Values) para uma tabela usando o comando LOAD DATA INFILE, um método rápido e eficiente para inserção de dados em massa.

Você também aprenderá o processo reverso: exportar dados de uma tabela para um novo arquivo CSV. Além disso, o laboratório abrange a realização de verificações básicas de validação de dados após uma importação para garantir a qualidade dos dados. Ao final deste laboratório, você será proficiente em mover dados para dentro e para fora do MySQL.

Prepare o Banco de Dados e a Tabela

Antes de poder importar dados, você precisa de um destino para eles. Isso envolve a criação de um banco de dados para abrigar seus dados e uma tabela com uma estrutura que corresponda aos dados que você pretende importar.

Primeiro, abra o terminal a partir do seu desktop.

Conecte-se ao servidor MySQL como o usuário root. Neste ambiente de laboratório, você pode usar sudo para se conectar sem senha.

sudo mysql -u root

Uma vez conectado, você verá o prompt do MySQL (mysql>), que indica que você está agora interagindo diretamente com o servidor de banco de dados.

Em seguida, crie um novo banco de dados chamado company. A cláusula IF NOT EXISTS é uma boa prática que impede um erro caso o banco de dados já tenha sido criado.

CREATE DATABASE IF NOT EXISTS company;

Agora, mude para o seu banco de dados recém-criado para que todos os comandos subsequentes se apliquem a ele.

USE company;

Finalmente, crie uma tabela chamada employees para armazenar os dados dos funcionários. A estrutura da tabela deve corresponder às colunas no arquivo CSV que você importará posteriormente.

CREATE TABLE IF NOT EXISTS employees (
    id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    department VARCHAR(50)
);
  • INT PRIMARY KEY: Define a coluna id como um inteiro e chave primária, o que significa que cada valor deve ser único.
  • VARCHAR(50): Define uma coluna que pode armazenar uma string de comprimento variável de até 50 caracteres.

Você pode verificar se a tabela foi criada com sucesso executando:

SHOW TABLES;

Você deverá ver a tabela employees listada na saída.

+-------------------+
| Tables_in_company |
+-------------------+
| employees         |
+-------------------+
1 row in set (0.00 sec)

Mantenha o shell do MySQL aberto, pois você continuará a usá-lo na próxima etapa.

Importar Dados de um Arquivo CSV

Com o banco de dados e a tabela prontos, você pode agora importar dados de um arquivo externo. A instrução LOAD DATA INFILE é uma maneira altamente eficiente de carregar dados em massa de um arquivo de texto para uma tabela.

O script de configuração para este laboratório já criou um arquivo chamado employees.csv no diretório /tmp. Antes de importar, é uma boa prática inspecionar o conteúdo do arquivo.

Importante: Você precisará abrir uma nova aba do terminal para este comando, pois seu terminal atual está executando o shell do MySQL. Clique no ícone + na janela do terminal para abrir uma nova aba. Na nova aba do terminal, execute:

cat /tmp/employees.csv

A saída mostra quatro linhas de dados separados por vírgula:

1,John,Doe,john.doe@example.com,Sales
2,Jane,Smith,jane.smith@example.com,Marketing
3,Peter,Jones,peter.jones@example.com,Engineering
4,Mary,Brown,mary.brown@example.com,HR

Agora, volte para a sua aba original do terminal com o shell do MySQL (mysql>). Use o comando LOAD DATA INFILE para importar o arquivo.

LOAD DATA INFILE '/tmp/employees.csv'
INTO TABLE employees
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

Vamos detalhar este comando:

  • LOAD DATA INFILE '/tmp/employees.csv': Especifica o caminho completo e absoluto para o arquivo de origem.
  • INTO TABLE employees: Especifica a tabela de destino para os dados.
  • FIELDS TERMINATED BY ',': Informa ao MySQL que vírgulas separam os campos de dados (colunas) em cada linha.
  • LINES TERMINATED BY '\n': Informa ao MySQL que cada nova linha no arquivo representa uma nova linha (registro).

Após a execução do comando, o MySQL relatará o número de linhas importadas. Para verificar se a importação foi bem-sucedida, consulte a tabela para ver seu conteúdo.

SELECT * FROM employees;

A saída deverá exibir os quatro registros do arquivo CSV, agora armazenados em sua tabela employees.

+----+------------+-----------+---------------------------+-------------+
| id | first_name | last_name | email                     | department  |
+----+------------+-----------+---------------------------+-------------+
|  1 | John       | Doe       | john.doe@example.com      | Sales       |
|  2 | Jane       | Smith     | jane.smith@example.com    | Marketing   |
|  3 | Peter      | Jones     | peter.jones@example.com   | Engineering |
|  4 | Mary       | Brown     | mary.brown@example.com    | HR          |
+----+------------+-----------+---------------------------+-------------+
4 rows in set (0.00 sec)

Exportar Resultados da Consulta para um Arquivo CSV

Exportar dados é tão importante quanto importar. Você pode precisar criar relatórios, compartilhar dados com outros sistemas ou realizar análises em um programa de planilhas. A instrução SELECT ... INTO OUTFILE permite salvar o resultado de qualquer consulta diretamente em um arquivo.

Primeiro, vamos adicionar mais dois funcionários à tabela no seu shell do MySQL.

INSERT INTO employees (id, first_name, last_name, email, department) VALUES
(5, 'Alice', 'Johnson', 'alice.johnson@example.com', 'Sales'),
(6, 'Bob', 'Williams', 'bob.williams@example.com', 'Marketing');

Agora, exporte toda a tabela employees para um novo arquivo chamado employees_export.csv. Primeiro, certifique-se de que você ainda está no banco de dados correto:

SELECT id, first_name, last_name, email, department
FROM company.employees
INTO OUTFILE '/tmp/employees_export.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
  • SELECT ...: Esta é uma consulta padrão que especifica quais dados exportar.
  • INTO OUTFILE '/tmp/employees_export.csv': Especifica o caminho completo para o arquivo de saída. Por segurança, o MySQL exige que este arquivo não exista previamente.
  • FIELDS TERMINATED BY ',': Separa os campos com uma vírgula.
  • ENCLOSED BY '"': Envolve cada valor de campo entre aspas duplas, que é um formato CSV comum.
  • LINES TERMINATED BY '\n': Termina cada linha com um caractere de nova linha.

Após executar o comando, mude para a sua outra aba do terminal (ou abra uma nova) e visualize o conteúdo do arquivo recém-criado.

cat /tmp/employees_export.csv

Você verá todas as seis linhas da sua tabela, formatadas como um arquivo CSV.

"1","John","Doe","john.doe@example.com","Sales"
"2","Jane","Smith","jane.smith@example.com","Marketing"
"3","Peter","Jones","peter.jones@example.com","Engineering"
"4","Mary","Brown","mary.brown@example.com","HR"
"5","Alice","Johnson","alice.johnson@example.com","Sales"
"6","Bob","Williams","bob.williams@example.com","Marketing"

Validar Dados Importados

Após importar dados, é crucial validá-los para garantir qualidade e integridade. Dados do mundo real são frequentemente desorganizados, contendo erros, valores ausentes ou formatos incorretos. Esta etapa mostra como usar consultas SQL simples para encontrar problemas comuns.

O script de configuração criou employees_validation.csv, que contém um e-mail inválido e um valor de departamento ausente. Primeiro, limpe a tabela employees no seu shell do MySQL.

TRUNCATE TABLE employees;

Agora, importe o arquivo de validação.

LOAD DATA INFILE '/tmp/employees_validation.csv'
INTO TABLE employees
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

Com os dados "sujos" carregados, vamos executar algumas verificações de validação.

1. Encontrar Formatos de E-mail Inválidos

Uma verificação muito básica para um e-mail válido é ver se ele contém um símbolo @ e um símbolo .. Podemos usar NOT LIKE para encontrar linhas que falham nesta verificação.

SELECT * FROM employees WHERE email NOT LIKE '%@%.%';

Esta consulta encontrará a linha onde o e-mail é invalid_email, pois falta os símbolos necessários.

+----+------------+-----------+---------------+------------+
| id | first_name | last_name | email         | department |
+----+------------+-----------+---------------+------------+
|  3 | Invalid    | Email     | invalid_email | Sales      |
+----+------------+-----------+---------------+------------+
1 row in set (0.00 sec)

2. Encontrar Departamentos Ausentes

Você pode encontrar linhas onde um valor está ausente verificando uma string vazia ''.

SELECT * FROM employees WHERE department = '';

Esta consulta encontrará a linha onde o departamento foi deixado em branco no arquivo CSV.

+----+------------+------------+--------------------------------+------------+
| id | first_name | last_name  | email                          | department |
+----+------------+------------+--------------------------------+------------+
|  4 | Missing    | Department | missing.department@example.com |            |
+----+------------+------------+--------------------------------+------------+
1 row in set (0.00 sec)

Estas consultas simples são ferramentas poderosas para uma verificação de qualidade de dados de primeira passagem. Após identificar linhas problemáticas, você pode decidir se as corrige com instruções UPDATE ou as remove com DELETE.

Você agora completou o laboratório. Você pode sair do shell do MySQL.

exit

Resumo

Neste laboratório, você aprendeu as operações fundamentais para mover dados para dentro e para fora de um banco de dados MySQL. Você começou configurando um ambiente de banco de dados adequado com um novo banco de dados e tabela. Em seguida, usou o comando LOAD DATA INFILE para importar eficientemente dados de um arquivo CSV.

Em seguida, você praticou a exportação de dados de uma tabela para um novo arquivo CSV usando a instrução SELECT ... INTO OUTFILE, uma tarefa comum para relatórios e compartilhamento de dados. Finalmente, você aprendeu a realizar validações básicas de dados com consultas SQL para verificar erros de formatação e valores ausentes após uma importação. Essas habilidades são essenciais para qualquer desenvolvedor ou administrador que trabalhe com MySQL.