terça-feira, 18 de agosto de 2020

Importando e exportando dados com SQL

Photo by Ken Yam on Unsplash

Até o momento aprendemos a criar um banco de dados, criar uma tabela e inserir dados nessa tabela com a declaração INSERT. O modo que vinhamos fazendo, inserindo linha a linha na tabela, pode ser útil para tabelas de testes rápidos ou adicionar novas linhas numa tabela já existente, mas o mais comum é inserir centenas ou até mesmo milhares de linhas. E fazer isso do jeito que vinhamos fazendo não é viável. Mas não se preocupe, existem outros meios.
Se os seus dados estiverem num arquivo com uma estrutura definida, separado em colunas, como os arquivos CSV, você pode importar esses dados diretamente para uma tabela com a instrução LOAD DATA INFILE. Essa instrução é utilizada para importar dados em massa.
Também podemos utilizar a instrução SELECT INTO OUFILE para exportar os dados de uma tabela. Essa instrução é muito útil quando você quer compartilhar os dados com um colega ou exportar os dados para outro formato, como um arquivo do Excel.
Nesse tutorial vamos aprender como importar e exportar dados utilizando a linguagem SQL. Mas antes de começarmos vamos verificar se a importação de dados é permitida com a instrução SHOW VARIABLES LIKE '%infile%'; e verificar onde o arquivo que vamos importar deve estar, com a instrução SHOW VARIABLES LIKE 'secure_file_priv';.

mysql> SHOW VARIABLES LIKE '%infile%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.01 sec)

mysql> SHOW VARIABLES LIKE 'secure_file_priv';
+------------------+------------------------------------------------+
| Variable_name    | Value                                          |
+------------------+------------------------------------------------+
| secure_file_priv | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
+------------------+------------------------------------------------+
1 row in set (0.01 sec)

Com essas duas instruções, descobrimos que a importação de arquivos é permitida e a pasta onde devemos colocar o arquivo que vamos importar é a Uploads. Se o valor da variável local_infile for OFF mude o seu valor com a instrução SET GLOBAL local_infile=1;.

Importando dados de um arquivo CSV com SQL

Os arquivos CSV são arquivos de texto puro. Nesses arquivos não existe formatação, os dados, nesse tipo de arquivo, são delimitados por vírgula. Você não precisa de um arquivo com extensão csv, pode ser um simples arquivo txt, mas os dados precisam estar delimitados por vírgulas. Esse é o conteúdo do arquivo que vamos utilizar:

Nome, Idade, Endereco
Amelia, 23, Rua Antonio Monteiro
Rafael, 52, 25 de Marco
Daniel, 32, Teotonio alcantara

Para importar esses dados vamos precisar criar uma tabela com três colunas. Veja o exemplo abaixo:

mysql> CREATE TABLE cadastro
    -> (nome VARCHAR(10), idade SMALLINT, endereco VARCHAR(25));
Query OK, 0 rows affected (0.76 sec)

mysql> LOAD DATA INFILE
    -> 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/dados.txt'
    -> INTO TABLE cadastro
    -> FIELDS TERMINATED BY ','
    -> LINES TERMINATED BY '\n'
    -> IGNORE 1 LINES;
Query OK, 3 rows affected (0.16 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT * FROM cadastro;
+--------+-------+------------------------+
| nome   | idade | endereco               |
+--------+-------+------------------------+
| Amelia |    23 |  Rua Antonio Monteiro  |
| Rafael |    52 |  25 de Marco           |
| Daniel |    32 |  Teotonio alcantara    |
+--------+-------+------------------------+
3 rows in set (0.02 sec)

Como funciona a instrução LOAD DATA INFILE

Na primeira instrução criamos uma tabela com três colunas. Cada uma para guardar strings, números e strings, respectivamente. Repare que esses são os tipos de dados do nosso arquivo dados.txt.
Na primeira linha da segunda instrução, estamos informando que vamos importar um arquivo. Na segunda linha, passamos o caminho desse arquivo entre aspas simples (Repare que não usamos barras invertidas). Depois definimos que os dados estão delimitados por vírgula, a linha termina com uma quebra de linha e que na leitura desse arquivo deve ser ignorado uma linha – a primeira.
Ignoramos uma linha porque, geralmente, a primeira linha dos arquivos csv contêm os nomes das colunas e não os dados.

Exportando uma tabela para um arquivo CSV

Você pode exportar tabelas de um banco de dados para um arquivo CSV com a instrução INTO OUTFILE. Com essa instrução você pode exportar os dados de uma tabela delimitando os valores com qualquer carácter especifico. Veja um exemplo:

mysql> SELECT nome, idade, endereco
    -> INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/dados.csv'
    -> FIELDS TERMINATED BY ','
    -> LINES TERMINATED BY '\n'
    -> FROM cadastro;
Query OK, 3 rows affected (0.03 sec)

Como funciona a instrução INTO OUTFILE

Na primeira linha, utilizamos SELECT para selecionar as colunas que queremos exportar. Na segunda linha definimos o caminho do arquivo. Depois definimos que os dados serão delimitados por vírgula, as linhas vão terminar com quebra de linha e, por último, informamos de qual tabela vamos exportar os dados.

0 comentários:

Postar um comentário