Big Data & Data Science
Jonatha Azevedo
ROTEIRO DA AULA
MOTIVAÇÃO
O que vamos estudar?
Banco de Dados Relacionais
Conjunto de Tabelas interligadas e pertencentes a um mesmo campo semântico.
MOTIVAÇÃO
O que vamos estudar?
Database Management Systems
Softwares que tornam os processos de busca, armazenamento e carregamento dos bancos de dados transparentes para o usuário.
Database
DBMS
API
API
API
APP
APP
USER
MOTIVAÇÃO
O que vamos estudar?
SQL (Structured Query Language)
Linguagens de programação simples, projetada para enviar comandos essenciais aos DBMSs.
SQL query
Query Language Processor
DBMS Engine
Parser + Optimizer
File Manager
+
Transaction manager
Physical Database
MOTIVAÇÃO
Por que vamos estudar?
BDs relacionais, DBMSs e SQL são peças fundamentais do mundo dos softwares direcionados ao processamento e análise de dados.
São conhecimentos indispensáveis a qualquer cientista de dados
MOTIVAÇÃO
Por que vamos estudar?
Persistência
Compartilhamento
Representação de Interrelações
Agilidade
DATABASE MANAGEMENT SYSTEMS
CRIAÇÃO DE BASES
ACESSO AOS DADOS
MANUTENÇÃO
organização
armazenamento
recuperação
aquisição
disseminação
recuperação
aquisição
disseminação
PERGUNTA
Qual a diferença entre um DBMS e um processador de texto ou gerenciador de planilhas?
Funções
DATABASE MANAGEMENT SYSTEMS
Resposta
Em DBMSs, a forma como os dados se relacionam pode e deve ser representada. Além disso, em planilhas e arquivos de texto não há controle sobre o que pode ser inserido ou quem tem acesso. Não são sistemas seguros.
Funções
Organização é interessante porque:
Mas como podemos construir esses modelos?
DATABASE MANAGEMENT SYSTEMS
Diagramas ER
Através de Diagramas Entidade-Relacionamento
(ER)
É importante que estes diagramas sejam produzidos antes de montar a base no DBMS
DATABASE MANAGEMENT SYSTEMS
Diagramas ER
A exigência destes modelos prévios não é um exagero.
Diagramas ER muito simples são exceção. Ainda mais no mundo de Big Data.
Vamos examiná-los mais de perto!
DATABASE MANAGEMENT SYSTEMS
Diagramas ER
Suponha que você queira montar uma base de dados para o seu blog. As tabelas poderiam ser:
Autores
nome, sobrenome, apelido
Categorias
nome, descrição
Posts
títulos,texto,data,configs
Tags
nome, descrição
Comentários
usuário, data, texto
Usuários
nome, sobrenome, apelido
Nome da tabela
Exemplos de colunas
DATABASE MANAGEMENT SYSTEMS
Diagramas ER
Faltam muitas informações sobre as relações!
Autores
nome, sobrenome, apelido
Categorias
nome, descrição
Posts
títulos,texto,data,configs
Tags
nome, descrição
Comentários
usuário, data, texto
Usuários
nome, sobrenome, apelido
Cardinalidade?
Direção?
Posts Relacionados?
Diagrama Entidade-Relacional
N
1
N
1
blog_post não existe sem blog_author
blog_comment não existe sem blog_post
blog_tag não existe sem blog_post
Primary KEY
Foreign KEY
DATABASE MANAGEMENT SYSTEMS
Bancos de Dados Relacionais
Como representamos estas relações nas tabelas em si?
title | article | author |
---|---|---|
Loren ipsun | Nulla id augue eget nisi ornare ultrices (...) | 2 |
Dolor Sit | Praesent consectetur malesuada (...) | 1 |
Donec Vulputabe | Proin congue, mi id sollicitudin rhoncu (...) | 1 |
Maecenas orci | Fusce augue risus (...) | 2 |
id | first_name | last_name |
---|---|---|
1 | João | Silva |
2 | Maria | Santos |
Foreign Key
(chave estrangeira)
Foreign Key
(chave primária)
DATABASE MANAGEMENT SYSTEMS
Principais opções no mercado
Nossa Opção
DATABASE MANAGEMENT SYSTEMS
Por que usaremos o MySQL?
SQL Server:
Oracle:
PostgreSQL:
DATABASE MANAGEMENT SYSTEMS
Por que usaremos o MySQL?
MySQL:
POPULAR
ÁGIL
ESCALÁVEL
GRATUITO
INTEGRÁVEL AO R
SQL
Structured Query Language
Somente as partes mais fundamentais das declarações em SQL funcionam em todos os DBMSs - há inúmeras extensões;
Diagramas
SQL
Structured Query Language
Diminui o número de linhas de código em DUAS ordens de grandeza!
Não é necessário escrever loops ou condições (if, for, while)
Para aplicações intensivas em dados, o ganho em produtividade e qualidade é incalculável
SQL
Structured Query Language
Depende do BDMS, ou seja, não é portável.
Transact-SQL (Microsoft), PL/SQL (Oracle)
COMANDOS SQL
Criação de uma base de dados
CREATE {DATABASE | SCHENA} [IF NOT EXISTS] db_name;
OBRIGATÓRIO
ALTERNATIVAS
OPCIONAL
USER-DEFINED
-- CRIANDO A BASE DE DADOS 'COMPANY'
CREATE SCHEMA company;
COMANDOS SQL
Criação de tabelas
Criaremos duas tabelas da base company no MySQL Workbench, usando SQL, passo a passo.
DEPT_ID | DEPT_NAME |
---|---|
1 | Contabilidade |
2 | Marketing |
3 | Vendas |
A coluna DEPT_ID contém o identificador único (primary key) de cada linha (cada departamento)
Núm. inteiro
Cadeia de caracteres
Tabela Departament
COMANDOS SQL
Criação de tabelas
A coluna EMP_ID contém o identificador único (primary key) de cada linha (cada empregado)
EMP_ID | EMP_NAME | EMP_AGE | EMP_SALARY | DEPT_ID |
---|---|---|---|---|
1 | João | 23 | 10000 | 1 |
2 | Maria | 24 | 7000 | 2 |
3 | José | 25 | 8000 | 3 |
4 | Ana | 27 | 6000 | 1 |
5 | Antônio | 28 | 5000 | 2 |
Núm.
inteiro
Cadeia de
caracteres
Núm.
inteiro
Núm.
real
Núm.
inteiro
Tabela Employee
COMANDOS SQL
Criação de tabelas
EMP_ID | EMP_NAME | EMP_AGE | EMP_SALARY | DEPT_ID |
---|---|---|---|---|
1 | João | 23 | 10000 | 1 |
2 | Maria | 24 | 7000 | 2 |
3 | José | 25 | 8000 | 3 |
4 | Ana | 27 | 6000 | 1 |
5 | Antônio | 28 | 5000 | 2 |
Tabela Employee
DEPT_ID | DEPT_NAME |
---|---|
1 | Contabilidade |
2 | Marketing |
3 | Vendas |
Tabela Departament
Chave estrangeira
(foreign key)
Chave primária
(primary key)
Atenção: não é necessário que as duas chaves tenham o mesmo nome.
COMANDOS SQL
Criação de tabelas
CREATE TABLE <table-name> ( <column-list> [ <constraint-list> ] )
Em <column-list> definimos TIPOS, que podem ser:
COMANDOS SQL
Criação de tabelas
CREATE TABLE <table-name> ( <column-list> [ <constraint-list> ] )
Em <constraint-list> contém RESTRIÇÕES, tais como:
COMANDOS SQL
Criação de tabelas
CREATE TABLE <table-name> ( <column-list> [ <constraint-list> ] )
-- CRIANDO A TABELA Department
CREATE TABLE company.Department(
dept_id integer,
dept_name varchar(100) not null,
CONSTRAINT DeptPK PRIMARY KEY (dept_id)
);
COMANDOS SQL
Criação de tabelas
CREATE TABLE <table-name> ( <column-list> [ <constraint-list> ] )
-- CRIANDO A TABELA Employee
CREATE TABLE company.Employee(
emp_id integer,
emp_name varchar(100) not null,
emp_age integer,
emp_salary float not null,
dept_id integer,
CONSTRAINT EmployeePK PRIMARY KEY (emp_id),
CONSTRAINT EmployeeFK FOREIGN KEY (dept_id) REFERENCES Department(dept_id)
);
COMANDOS SQL
Preenchimento de tabelas
INSERT [ INTO ] tbl_name [ (col_name,...) ]
{ VALUES | VALUE }
-- Inserir linha [ 15 30 ] na colunas 1 e 2
INSERT INTO tbl_name (col1,col2) VALUES(15, col2*2);
-- Inserir linha [ 1 2 3 ] , [ 4 5 6 ], [ 7 8 9 ] na colunas a, b e c
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
COMANDOS SQL
Preenchimento de tabelas
INSERT [ INTO ] tbl_name [ (col_name,...) ]
{ VALUES | VALUE }
INSERT INTO company.Department (dept_name, dept_id)
VALUES ("Contabilidade",1),
("Marketing",2),
("Vendas",3);
INSERT INTO company.Employee (emp_id, emp_name, emp_age, emp_salary, dept_id)
VALUES(1,"João",23,10000.00,1),
(2,"Maria",24,7000.00,2),
(3,"José",25,8000.00,3),
(4,"Ana",27,6000,1),
(5,"Antônio",28,5000,2);
COMANDOS SQL
Preenchimento de tabelas
COMANDOS SQL
Preenchimento de tabelas
parâmetro opcional, mas TEM que ser usado caso se esteja lendo um arquivo da sua própria máquina (nosso caso)
LOAD DATA [LOCAL] INFILE 'file_name'
INTO TABLE tbl_name
[{FIELDS| COLUMNS}[ TERMINATED BY 'string' ] [[OPTIONALLY]
ENCLOSED BY 'char']
[ESCAPED BY 'char']]
[LINES [STARTING BY 'string'] [TERMINATED BY 'string']]
[IGNORE number {LINES | ROWS}]
CUIDADO!
As aspas são importantes
COMANDOS SQL
Preenchimento de tabelas
LOAD [LOCAL] INFILE 'file_name' {...}
Suponha que você tenha um arquivo contendo os dados ao lado. Uma tabela com as colunas 'valor' e 'moeda' já foi criada no MySQL, mas está vazia e será preenchida com os valores do arquivo, que segue as seguintes regras de sintaxe
# -> nova linha
$ -> separação de campos
" " -> contêm cadeias de caracteres
\ -> caracter de escape
Valor | Moeda |
---|---|
30.25 | UAD |
59.60 | US$ |
635.39 | R$ |
426.52 | AUD |
3.2 | US$ |
54.05 | R$ |
COMANDOS SQL
Preenchimento de tabelas
LOAD [LOCAL] INFILE 'file_name' {...}
LOAD DATA LOCAL INFILE "caminho\\para\\arquivo"
INTO TABLE nome_da_tabela
FIELDS TERMINATED BY '$'
ENCLOSED BY '"'
ESCAPED BY "\\"
LINES STARTING BY '#'
IGNORE 4 LINES;
#arquivo de dados genérico
#as regras de sintaxe não seguem qualquer padrão oficial
#
#valor$moeda
#30.25$"AUD"
#59.60$"US\$"
#539.39$"R\$"
#426.52$"AUD"
#3.2"US\$"
#54.05$"R\$"
COMANDOS SQL
Preenchimento de tabelas
LOAD [LOCAL] INFILE 'file_name' {...}
LOAD DATA LOCAL INFILE "caminho\\para\\arquivo"
INTO TABLE nome_da_tabela
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 2 LINES;
Seu arquivo poderia ser um .csv, como abaixo. Nesse caso, as regras de sintaxe são outras:
arquivo .csv padrão \n
valor,moeda\n
30.25,"AUD"\n
29.60,"US$"\n
653.39,"R$"\n
426.52,"AUD"\n
3.2,"US$"\n
54.05,"R$"\n
COMANDOS SQL
Consulta aos dados
Para fazer buscas no banco, utilizamos o comando SELECT. Suas várias cláusulas serão examinadas uma a uma.
SELECT [ DISTINCT | * ] [ AS alias ]
[ FROM table_names
[ WHERE where_condition ]
[ GROUP BY {col_name} [ASC | DESC], ... ]
[ ORDER BY {col_name} [ASC | DESC], ... ]
[ INTO OUTFILE 'file_name' ]
Há mais cláusulas além de WHERE, GROUP BY, ORDER BY e INTO OUTFILE, mas essas são certamente as mais usadas.
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
-- CONSULTAR TODAS AS LINHAS
SELECT * FROM Employee
-- CONSULTAR TODAS AS LINHAS
SELECT * FROM Department
EMP_ID | EMP_NAME | EMP_AGE | EMP_SALARY | DEPT_ID |
---|---|---|---|---|
1 | João | 23 | 10000 | 1 |
2 | Maria | 24 | 7000 | 2 |
3 | José | 25 | 8000 | 3 |
4 | Ana | 27 | 6000 | 1 |
5 | Antônio | 28 | 5000 | 2 |
DEPT_ID | DEPT_NAME |
---|---|
1 | Contabilidade |
2 | Marketing |
3 | Vendas |
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
WHERE e AS
Quem são os empregados com mais de 25 anos?
Quantos anos eles tem?
SELECT emp_name AS NAME, emp_age AS AGE
FROM company.Employee
WHERE emp_age > 25;
Enquanto SELECT filtra colunas, WHERE filtra linhas.
NAME | AGE |
---|---|
Ana | 27 |
Antônio | 28 |
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
WHERE e AS
Quem são os empregados cujo nome começa com a letra J?
SELECT emp_name
FROM company.Employee
WHERE emp_name LIKE 'J%'
O caracter '%' é chamado de wildcard. Indica que qualquer cadeia de caracteres pode entrar em seu lugar.
EMP_NAME |
---|
João |
José |
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
WHERE e AS
Qual departamento pertence cada empregado?
SELECT e.emp_name, d.dept_name
FROM company.Employee e, company.Department d
WHERE e.dept_id = d.dept_id;
Para entender esta consulta, precisamos ter em mente a ordem que o MySQL avalia comandos deste tipo.
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
ORDEM DE AVALIAÇÃO DE UMA QUERY
OPERAÇÕES
DE LINHA
FROM
WHERE
OPERAÇÕES
DE COLUNA
GROUP BY
HAVING
RESULTADOS
ORDER BY
SELECT
COMANDOS SQL
Consulta aos dados
EMP_ID | EMP_NAME | EMP_AGE | EMP_SALARY | DEPT_ID |
---|---|---|---|---|
1 | João | 23 | 10000 | 1 |
2 | Maria | 24 | 7000 | 2 |
3 | José | 25 | 8000 | 3 |
4 | Ana | 27 | 6000 | 1 |
5 | Antônio | 28 | 5000 | 2 |
DEPT_ID | DEPT_NAME |
---|---|
1 | Contabilidade |
2 | Marketing |
3 | Vendas |
FROM company.Employee e, company.Department d
WHERE e.dept_id= d.dept_id
SELECT e.emp_name, d.dept_name
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
WHERE e AS
Agora sabemos dizer a qual departamento pertence cada empregado!
SELECT e.emp_name, d.dept_name
FROM company.Employee e, company.Department d
WHERE e.dept_id = d.dept_id;
EMP_NAME | DEPT_NAME |
---|---|
João | Contabilidade |
Ana | Contabilidade |
Maria | Marketing |
Antônio | Marketing |
José | Vendas |
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
Qual a quantidade de empregado em cada departamento?
SELECT d.dept_name, count(e.emp_name) as NUM_EMPLOYEE
FROM company.Employee e, company.Department d
WHERE e.dept_id = d.dept_id
GROUP BY d.dept_name ;
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
EMP_ID | EMP_NAME | EMP_AGE | EMP_SALARY | DEPT_ID |
---|---|---|---|---|
1 | João | 23 | 10000 | 1 |
2 | Maria | 24 | 7000 | 2 |
3 | José | 25 | 8000 | 3 |
4 | Ana | 27 | 6000 | 1 |
5 | Antônio | 28 | 5000 | 2 |
DEPT_ID | DEPT_NAME |
---|---|
1 | Contabilidade |
2 | Marketing |
3 | Vendas |
FROM company.Employee e,
company.Department d
WHERE e.dept_id = d.dept_id
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
EMP_ID | EMP_NAME | EMP_AGE | EMP_SALARY | DEPT_ID |
---|---|---|---|---|
1 | João | 23 | 10000 | 1 |
2 | Maria | 24 | 7000 | 2 |
3 | José | 25 | 8000 | 3 |
4 | Ana | 27 | 6000 | 1 |
5 | Antônio | 28 | 5000 | 2 |
GROUP BY d.dept_name;
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
EMP_NAME | DEPT_NAME |
---|---|
João | Contabilidade |
Ana | Contabilidade |
Maria | Marketing |
Antônio | Marketing |
José | Vendas |
SELECT d.dept_name,
count(e.dept_name) as NUM_EMPLOYEE
1
3
2
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
Agora sabemos dizer a quantidade de empregados em cada departamento.
SELECT d.dept_name,
count(e.emp_name) as NUM_EMPLOYEE
FROM company.Employee e, company.Department d
WHERE e.dept_id = d.dept_id
GROUP BY d.dept_name;
DEPT_NAME | NUM_EMPLOYEE |
---|---|
Contabilidade | 2 |
Marketing | 2 |
Vendas | 1 |
COMANDOS SQL
Consulta aos dados
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
Qual é a média dos salários dos empregados que ganham mais de 5000, por departamento?
SELECT d.dept_name,
count(e.emp_name) as NUM_EMPLOYEE,
avg(e.emp_salary) as AVG_SALARY
FROM Employee e, Department d
WHERE e.dept_id = d.dept_id AND emp_salary > 5000
GROUP BY d.dept_name;
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
Apenas Antônio, que trabalha no Marketing, não entra na conta, pois ganha exatamente 5000.
SELECT d.dept_name, count(e.emp_name) as NUM_EMPLOYEE, avg(e.emp_salary) as AVG_SALARY
FROM Employee e, Department d
WHERE e.dept_id = d.dept_id AND emp_salary > 5000
GROUP BY d.dept_name;
DEPT_NAME | NUM_EMPLOYEE | AVG_SALARY |
---|---|---|
Contabilidade | 1 | 8000 |
Marketing | 1 | 7000 |
Vendas | 2 | 8000 |
COMANDOS SQL
Consulta aos dados
SELECT [ DISTINCT | * ] { ... }
GROUP BY
Qual o salário de cada empregado, ordenado do mais baixo para o mais alto?
SELECT emp_name, emp_salary
FROM company.Employee
ORDER BY emp_salary ASC;
EMP_NAME | EMP_SALARY |
---|---|
Antônio | 5000 |
Ana | 6000 |
Maria | 7000 |
José | 8000 |
João | 10000 |
COMANDOS SQL
Modificações de Tabelas
SELECT [ DISTINCT | * ] { ... }
GROUP BY
Qual o salário médio de cada departamento, ordenado do mais baixo para o mais alto?
SELECT d.dept_name, avg(e.emp_salary) as AVG_SALARY
FROM company.Employee e, company.Department d
WHERE e.dept_id = d.dept_id
GROUP BY d.dept_name
ORDER BY AVG_SALARY ASC;
DEPT_NAME | AVG_SALARY |
---|---|
Marketing | 6000 |
Vendas | 8000 |
Contabilidade | 8000 |
COMANDOS SQL
Modificação de Tabelas
ALTER TABLE tbl_name
ADD [COLUMN] (col_name column_definition, ...)
[FIRST | AFTER col_name]|
ADD [CONSTRAINT [symbol]] PRIMARY KEY (col_name, ...)
| ADD [CONSTRAINT [symbol]] FOREIGN KEY (col_name, ...)
[REFERENCES] references_definition
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY col_name
| DROP PRIMARY KEY fk_symbol
COMANDOS SQL
Modificação de Tabelas
ALTER TABLE tbl_name ( ... )
Queremos adicionar mais uma informação à tabela de empregados: o gênero.
ALTER TABLE company.Employee
ADD COLUMN (emp_gender varchar(10));
ALTER TABLE company.Employee
MODIFY COLUMN emp_gender char(1) ;
Após definir o tipo da coluna, mudamos de ideia e alteramos para um tipo de tamanho fixo.
COMANDOS SQL
Modificação de Tabelas
UPDATE company.Employee SET emp_gender = 'M'
WHERE emp_name = 'João' OR emp_name = 'José' OR emp_name ='Antônio' ;
UPDATE company.Employee SET emp_gender = 'F'
WHERE emp_name = 'Maria' OR emp_name = 'Ana' ;
UPDATE tbl_name
SET col_name1 = expr [, col_name2 = expr2 ] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
COMANDOS SQL
Modificação de Tabelas
DELETE FROM company.Department
WHERE dept_id = 1 ;
DELETE FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`company`.`employee`, CONSTRAINT `EmployeeFK` FOREIGN KEY (`dept_id` ) REFERENCES `department` (`dept_id`))
Não conseguimos deletar a linha da tabela Department, porque existe uma chave estrangeira apontando para ela!
COMANDOS SQL
Remoção de tabelas e bases
Drop [IF EXISTS] TABLE tbl_name;
DROP TABLE company.Employee;
DROP TADABASE company;
Drop [IF EXISTS] TABLE DATABEASE tadabase_name;
INTEGRAÇÃO COM O R
2. Procurar o nome do host no MySQL:
SHOW VARIABLES WHERE Variable_name = 'hostname';
3. Instalar o pacote DBI e RMySQL e carregá-lo:
install.packages(c('DBI','RMySQL'))
library(DBI)
library(RMySQL)
# criando o usuario user.name de senha password
CREATE USER 'user.name'@'%' IDENTIFIED BY 'password';
# garantindo todos os direitos de acesso ao usuario user.name
GRANT ALL ON db_name.table_name TO 'user.name'@'%';
INTEGRAÇÃO COM O R
4. Estabelecer a conexão com a base:
5. Fazer uma consulta
conn = dbConnect(MySQL(), db = "wdi", user = "wdiuser",
password = 'wdiuser', host = "", port=3306)
6. Desconectar
dbDisconnect(conn)
results <- dbGetQuery(conn, "select CountryCode from Country")
head(results)
CountryCode
1 ABW
2 ADO
3 AFG
4 AGO
5 ALB
6 ARB
Caso tenha criado um banco no serviço da AWS RDS e não esteja usando, lembre-se de desativá-lo para assim evitar cobranças indevidas.
Caso queira cancelar a conta feito na AWS, siga o passo a passo no link abaixo:
1. Onde estão os arquivos .csv que devem ser carregados para a base Titanic? Na plataforma da infnet.
2. Onde estes arquivos devem ser colocados? Algumas versões do MySQL Workbench só aceitam ler arquivos que estejam em C:\ProgramData\MySQL\MySQL Server 5.7\Uploads. Atenção: A pasta ProgramData está escondida.
3. Mesmo colocando os arquivos nesta pasta do item 2, não funcionou. O que fazer? No MySQL Workbench, vá em Edit > Preferences > SQL Editor, desmarque a opção Safe Updatese reconecte-se ao servidor. Não esqueça de colocar duas barras (\\) no endereço do arquivo que está tentando carregar. Comparar cuidadosamente seu código com os exemplos dos slides também é indicado : )
Lista 1
4. Não consigo usar o comando LOAD DATA para carregar as tabelas. Todos os arquivos estão corrompidos? Não, nenhum está. Você provavelmente está esquecendo de inserir a palavra LOCAL no comando. Veja os exemplos do LOAD DATA nestes slides.
5. Meu código executou perfeitamente mas há marcas vermelhas do lado das linhas. Tem alguma coisa errada? Não. Esse é um bug conhecido da versão do MySQL Workbench que está instalada nas máquinas do laboratório.
Lista 1
1. Onde estão os arquivos .csv que devem ser carregados para a base wdi? Na plataformada infnet.
2. Onde estes arquivos devem ser colocados? Algumas versões do MySQL Workbench só aceitam ler arquivos que estejam em C:\ProgramData\MySQL\MySQL Server 5.7\Uploads. Atenção: A pasta ProgramData está escondida.
3. Mesmo colocando os arquivos nesta pasta do item 2, não funcionou. O que fazer? No MySQL Workbench, vá em Edit > Preferences > SQL Editor, desmarque a opção Safe Updatese reconecte-se ao servidor. Não esqueça de colocar duas barras (\\) no endereço do arquivo que está tentando carregar. Comparar cuidadosamente seu código com os exemplos dos slides também é indicado : )
Lista 2
4. Não consigo usar o comando LOAD DATA para carregar as tabelas. Todos os arquivos estão corrompidos? Não, nenhum está. Você provavelmente está esquecendo de inserir a palavra LOCAL no comando. Veja os exemplos do LOAD DATA nestes slides.
5. Carreguei a tabela Series, mas apareceram vários warnings. Tem problema? Não. Esseswarnings apenas indicam que o MySQL truncou espaços em branco. Por exemplo, transformou a string "1.2 " em 1.2.
6. Meu código executou perfeitamente mas há marcas vermelhas do lado das linhas. Tem alguma coisa errada? Não. Esse é um bug conhecido da versão do MySQL Workbench que está instalada nas máquinas do laboratório.
7. O MySQL Workbench não permite que eu crie tabelas com colunas dos tipos varchar(5000) ou tinyint. O que fazer? Troque varchar(5000) por text e tinyint por integer.
Lista 2