Escolar Documentos
Profissional Documentos
Cultura Documentos
Guided Training
Ricardo Sallin
Data Academy B2W DIGITAL
Ricardo Sallin
Americanas: mar’16
Origem: Centrão de SP
Formação: Processamento de Dados (Fatec-SP)
Antes da Americanas: Santander, Grupo Pão de Açúcar, Oi
Interesses: Projeto Pizzarias do Mundo
Data Academy B2W DIGITAL
Raphael Mantilha
B2W: jan/2017
Origem: Campinas/SP
Formação: Engenharia de Computação (PUC-Campinas)
Antes da Americanas: CI&T
Interesses: Jogos/Animes/Filmes
Data Academy B2W DIGITAL
AGENDA
Aula 2 Exercício com dados de vendas; Cuidados com queries; Recursos da bee
Aula 4 Subqueries e With: dividir para conquistar; Criando um monitoramento diário; Além da Bee
Data Academy B2W DIGITAL
Aula 1
https://universoamericanas.neolude.com.br/
PresentialMeeting/ConfirmPresence/Nzk0O
Dc6NTMzMjg=
Data Academy B2W DIGITAL
Fundamentos do
Relacional
Data Academy B2W DIGITAL
Pesquisadores na IBM
Matemática da computação
Dados pertencem a tipos (ou domínios): Nomes de pessoas, de países, de cidades, quantidades, valores, datas...
Tabelas têm chaves primárias (ou Primary Key, PK, etc): é o “RG” de cada linha na tabela
Data Academy B2W DIGITAL
Cliente Servidor
é o seu computador, que envia uma query (consultas) ao Computador de alta capacidade, que comporta o BD e
Servidor, seja através de um sistema (Bee, Vegas e outros) outros sistemas. Responde as queries com dados (outras
ou diretamente tabelas)
Data Academy B2W DIGITAL
(1989)
(1980) (1989)
Alternativa da Microsoft,
Sinônimo de BD, muito Importante nome do software livre:
também muito usado
consolidado no mercado “Os elefantes nunca esquecem”
(1996)
Principal BD de software livre (2000)
(1992)
Levou o conceito de BD aos SQL local em arquivo!
PCs, com interface gráfica (quase um Excel SQL)
(2010)
Plataforma muito poderosa: inclui o Bigquery
(que usa SQL) entre muitas outras ferramentas
Data Academy B2W DIGITAL
Conhecendo a
bee Data Platform
Data Academy B2W DIGITAL
Acompanhe em http://bee.b2w
Muita performance
Data Academy B2W DIGITAL
É só abrir um chamado no BHD, digitar bee e clicar na pastinha IAM: ● acesso à plataforma pra você conseguir entrar
Exercício:
vamos fazer login?
Data Academy B2W DIGITAL
Agora selecionar
o seu projeto
Data Academy B2W DIGITAL
Exercício:
acessar o Bigquery
Data Academy B2W DIGITAL
b2w-bee-analytics
seller-analytics-prd
Data Academy B2W DIGITAL
b2w-bee-analytics
seller-analytics-prd
Data Academy B2W DIGITAL
Exercício:
fixar um projeto
Data Academy B2W DIGITAL
bee-explorer.internal.b2w.io
Data Academy B2W DIGITAL
A Linguagem SQL
Data Academy B2W DIGITAL
select *
from
Digite
where no seu
Bigqu
ery
Data Academy B2W DIGITAL
select *
from `seller-analytics-prd.clean_seller.cadastro`
where
`
São crases ( ), e não aspas!
Vamos entender isso já já :)
Data Academy B2W DIGITAL
...colocar um filtro...
select *
from `b2w-bee-analytics.clean_seller.cadastro`
where area = 'TOPKA'
select *
from `b2w-bee-analytics.clean_seller.cadastro`
where area = 'TOPKA'
order by analista, nome_parceiro
Data Academy B2W DIGITAL
Oba, funcionou!!
O resultado da sua
primeira query na bee!!
Data Academy B2W DIGITAL
E voltando à
Linguagem SQL...
Data Academy B2W DIGITAL
E o próprio AS não é obrigatório. É só colocar o “alias” (novo nome) diretamente depois do campo!
Data Academy B2W DIGITAL
LIMIT não tem nenhum efeito na quantidade de dados processados. Ele não serve pra isso!
Vamos ver alguns casos em que ele é bastante útil
Data Academy B2W DIGITAL
SELECT BETWEEN
FROM LIKE
WHERE DISTINCT
ORDER BY GROUP BY
AS HAVING
IN LIMIT
Data Academy B2W DIGITAL
Aula 2
https://universoamericanas.neolude.com.br/
PresentialMeeting/ConfirmPresence/Nzk0O
Dg6NTMzMjg=
Data Academy B2W DIGITAL
AGENDA
Aula 2 Exercício com dados de vendas; Cuidados com queries; Recursos da bee
Aula 4 Subqueries e With: dividir para conquistar; Criando um monitoramento diário; Além da Bee
Data Academy B2W DIGITAL
Exercício:
Tabela de Vendas
Data Academy B2W DIGITAL
● `b2w-bee-analytics.evaluated_sales.sales`
● Todos os detalhes de todos os dados de pedidos!
Vamos coletar alguns dados dessa tabela e depois faremos várias mudanças! #variaçõesNoMesmoTema
Data Academy B2W DIGITAL
SELECT
FROM `b2w-bee-analytics.evaluated_sales.sales`
WHERE
SELECT
FROM `b2w-bee-analytics.evaluated_sales.sales`
WHERE date(partition_date) in ("2020-11-26", "2019-11-29", "2018-11-23")
Calma!!
Não confunda
`´
acento crase ( )
``
O primeiro cuidado é com as aspas com acento agudo ( )
Crase ( )
especifica projetos,
datasets e tabelas
São usados dois tipos de aspas na bee:
` b2w-bee-analytics.clean_seller.cadastro
`
O outro são as aspas mesmo, usadas pra delimitar valores literais
(texto). Em geral aparecem nos filtros, por ex:
Aspas simples ('' )
where area = 'TOPKA' ou aspas duplas ("")
Nesses casos a bee aceita aspas simples ou duplas especificam valores
Essas crases servem pra manter compatibilidade com versões mais antigas do SQL.
Por isso não mudam!
Data Academy B2W DIGITAL
A linguagem SQL é “case INsensitive”, ou seja, tanto faz escrever os comandos em maiúsculas ou minúsculas:
Porém os dados são “case SENsitive”, ou seja, precisamos seguir conforme está nos dados:
select * from `projeto.dataset.tabela` where area = 'TopKa' Um deles vai trazer os dados:
select * from `projeto.dataset.tabela` where area = 'TOPKA' os outros não trarão nada!!
select * from `projeto.dataset.tabela` where area = 'topka' (mas todos vão funcionar)
Data Academy B2W DIGITAL
A linguagem SQL é bem flexível neste ponto. Você pode colocar a sua query como quiser, sem impactos
Exceto no `projeto.dataset.tabela`: Aqui não pode quebrar, tem que ficar tudo junto dentro das crases
Bora testar?
Data Academy B2W DIGITAL
Hoje o preço é:
1 Terabyte (TB) = USD 5
Mais cuidado ainda com as tabelas de visitas!! Elas são realmente gigantescas
Data Academy B2W DIGITAL
Particionamento
Em geral são colunas de data. Com elas você pode instruir a bee a
pegar só uma fatia da tabela, sem ter que percorrê-la inteira
Jan
Mar
Fev
Consulte o particionamento na documentação de cada tabela
Data Academy B2W DIGITAL
Documentação
LIMIT não tem nenhum efeito na quantidade de dados processados. Ele não serve pra isso!
Vamos ver na aula 4 alguns casos em que ele é bastante útil
Data Academy B2W DIGITAL
“O que é um NULL?”
-- Johnny Lawrence (Cobra Kai)
NULL
Recursos da bee
Data Academy B2W DIGITAL
Formatar Consultas
maasss
existe o debate :)
Data Academy B2W DIGITAL
Salvar Consultas
Salvar Consultas
Salvar Consultas
Salvar Resultados
Salvar Resultados
Salvar Resultados
Importando dados
pra bee
Data Academy B2W DIGITAL
“”Mas Sallin, como eu faço pra subir a minha base pra bee?””
E pronto! A sua tabela agora está na bee. Você pode consultá-la usando SQL
● Este é um upload pontual de dados!
● Se o csv mudar, os dados não serão atualizados na bee
● Se você quiser passar seus dados diariamente para a bee, procure help.bee@b2wdigital.com
● O time de Engenharia da bee usa todas as técnicas de ingestão de dados
Data Academy B2W DIGITAL
Exercício: importar
um arquivo .csv para
o seu dataset
Data Academy B2W DIGITAL
Aula 3
https://universoamericanas.neolude.com.br/Pr
esentialMeeting/ConfirmPresence/Nzk1ODg6
NTMzMjg=
Data Academy B2W DIGITAL
AGENDA
Aula 2 Exercício com dados de vendas; Cuidados com queries; Recursos da bee
Aula 4 Subqueries e With: dividir para conquistar; Criando um monitoramento diário; Além da Bee
Data Academy B2W DIGITAL
Chaves Estrangeiras
e Modelo de Dados
(Entidade-Relacionamento)
Data Academy B2W DIGITAL
Chave Estrangeira
Chave Estrangeira
1 10 1 1250
2 20 1 3000
1 20 1 3000
2 30 1 1500
Data Academy B2W DIGITAL
Pedido
1:N
Data Academy B2W DIGITAL
Cliente Produto
Um Produto é comprado por vários Clientes
(em vários pedidos)
Pedido
Existe também o Relacionamento 1:1
(pouco usado)
Data Academy B2W DIGITAL
Modelo de Dados
Relacionamento
É o mapa de um sistema
Entidade
Modelo de Dados
Cliente Produto
Relacionamentos (às vezes) têm nomes
É feito por →
Contém →
Pode ser nos dois sentidos
Pode ser em um sentido
Pode não ter nome nenhum :)
Pedido
Faz → ← Está contido em
Data Academy B2W DIGITAL
Faz →
Pedido Pagamento Forma Pagto
Valor Total Data Pagto Nome
Data Foi Pago?
Vendedor Qtd Dias Atraso
Taxa Juros Diária
Desconto Financeiro
Código
Contém → ← Está no Nome Produto
Item Produto Categoria
Ficha Técnica
Foto
Quantidade
Desconto Comercial
Data Academy B2W DIGITAL
Joins
Data Academy B2W DIGITAL
Joins
Joins são recursos da linguagem SQL que acionam as chaves primárias e estrangeiras das tabelas
Com eles é possível juntar (join) duas tabelas num único resultado contendo os dados de ambas as tabelas
Existe também o OUTER JOIN , mas vamos manter o suspense por alguns slides!
Data Academy B2W DIGITAL
Joins
select idA, campoA, idB, campoB Traz apenas os idA que também estiverem na tabela B.
from tabelaA INNER JOIN tabelaB on idA = idB Se tiver só na A, não vai aparecer!
Não precisa ficar tudo numa mesma linha (e em geral não fica)
As tabelas são juntadas por seus campos idA e idB, em busca de valores em comum
Data Academy B2W DIGITAL
Joins
b2w-bee-sandbox.sallin.cargos b2w-bee-sandbox.sallin.pessoas
ID Cargo ID Pessoa cargo
1 Analista de Produto 1 Roberta 7
2 Analista de Risco 2 Luciano 4
3 Analista Financeiro 3 Solange 3
4 Desenvolvedor Back End 4 Bruno 6
5 Desenvolvedor Front End 5 Paulo 2
6 Designer de UX 6 Enzo NULL
Estagiário recém-contratado! :)
7 Gerente
Data Academy B2W DIGITAL
Joins
Exercício: juntar as
suas tabelas de
Pessoas e Cargos
Data Academy B2W DIGITAL
Joins
Joins
select idA, campoA, idB, campoB Traz todos os idA da tabelaA, mesmo que não estejam na
from tabelaA tabelaB.
LEFT OUTER JOIN tabelaB on idA = idB Quando tiver, faz a correspondência com o idB
select idA, campoA, idB, campoB Traz todos os idB da tabelaB, mesmo que não estejam na
from tabelaA tabelaA.
RIGHT OUTER JOIN tabelaB on idA = idB Quando tiver, faz a correspondência com o idA
Data Academy B2W DIGITAL
Joins
Exercício: testar o
Outer Join
Data Academy B2W DIGITAL
Joins
Exercício: testar o
Outer Join filtrando
linhas NULL
Data Academy B2W DIGITAL
Joins
Exercício: testar o
Right Outer Join
Data Academy B2W DIGITAL
Joins
Exercício: inverter
Right e Left Outer
Joins
Data Academy B2W DIGITAL
Joins
select idA, campoA, idB, campoB Traz todos os idA da tabelaA e todos os idB da tabelaB,
from tabelaA havendo ou não correspondência
FULL OUTER JOIN tabelaB on idA = idB
Quando tiver correspondência, ela aparece
Data Academy B2W DIGITAL
Joins
Exercício: testar o
Full Outer Join
Data Academy B2W DIGITAL
Resumindo os diversos tipos de Join: Left Outer Join Right Outer Join
Data Academy B2W DIGITAL
Aula 4
https://universoamericanas.neolude.com.br/Pr
esentialMeeting/ConfirmPresence/Nzk1ODk6
NTMzMjg=
Data Academy B2W DIGITAL
AGENDA
Aula 2 Exercício com dados de vendas; Cuidados com queries; Recursos da bee
Aula 4 Subqueries e With: dividir para conquistar; Criando um monitoramento diário; Além da Bee
Data Academy B2W DIGITAL
Subqueries: dividir
para conquistar
Data Academy B2W DIGITAL
Imagine que você quer rodar uma query mais complexa, por exemplo:
“Quais são os Top 10 produtos vendidos pelos Top 10 Sellers em GMV no mês?”
SELECT pit,
cast(sum(order_line_total_value) as int64) as gmv
FROM `b2w-bee-analytics.evaluated_sales.sales`
Subqueries: dividir para conquistar WHERE date(partition_date) >= "2021-01-01"
and payment_status = 'APROVADO'
and seller_id in (
SELECT seller_id
Mas tem alguns detalhes:
FROM `b2w-bee-analytics.evaluated_sales.sales`
Subqueries devem retornar apenas um campo WHERE date(partition_date) >= "2021-01-01"
quando usadas em filtros
and payment_status = 'APROVADO'
and marketplace_flag = 'Y'
Então alteramos o Order By e colocamos a métrica group by 1
(GMV) diretamente na ordenação order by sum(order_line_total_value) desc
limit 10
A ordenação é necessária na query de dentro, para )
garantir os 10 maiores sellers group by 1
order by 2 desc
limit 10;
Data Academy B2W DIGITAL
E tem um detalhe mais importante ainda: estas são as vendas desses PITs com esses sellers!
Se é essa resposta que você procura, tudo bem!
Mas poderíamos pegar as vendas totais desses PITs! (com qualquer seller, não só Top 10)
“Dados os Top 10 produtos vendidos pelos Top 10 Sellers em GMV no mês, qual a participação desse grupo de Sellers nas
vendas totais desses produtos?”
Agora complicou!!
Data Academy B2W DIGITAL
Quando o fluxo de subqueries fica muito complexo, podemos usar a cláusula… WITH
Ela consegue transformar as lógicas mais complexas em um pipeline de processamento,
o que a torna um dos recursos mais poderosos da linguagem SQL
Passo 1: Pegar as vendas totais por Seller e os Top 10 Sellers. Esse já temos:
Primeiro a gente define um “step” com a query reservada: um bloco entre parênteses com um nome...
with top10sellers as (
SELECT seller_id, cast(sum(order_line_total_value) as int64) as gmv
FROM `b2w-bee-analytics.evaluated_sales.sales`
WHERE date(partition_date) >= "2021-01-01"
and payment_status = 'APROVADO'
and marketplace_flag = 'Y'
group by 1
order by 2 desc
limit 10
)
...
Data Academy B2W DIGITAL
with
top10sellers as (
SELECT seller_id, sum(order_line_total_value) as gmv
FROM `b2w-bee-analytics.evaluated_sales.sales`
WHERE date(partition_date) >= "2021-01-01"
and payment_status = 'APROVADO'
and marketplace_flag = 'Y'
group by 1
...e esse step passa a ficar disponível para os order by 2 desc
seguintes, limit 10
como se fosse uma tabela temporária!!! ),
top10pitsDessesSellers as (
SELECT pit, cast(sum(order_line_total_value) as int64) as gmv
(apenas durante a execução dessa query)
FROM `b2w-bee-analytics.evaluated_sales.sales` s
inner join top10sellers t on s.seller_id = t.seller_id
Olha o que dá pra fazer: WHERE date(partition_date) >= "2021-01-01"
and payment_status = 'APROVADO'
and marketplace_flag = 'Y'
group by 1
order by 2 desc
limit 10
)
select * from top10pitsDessesSellers
Data Academy B2W DIGITAL
with
top10sellers as (
...
),
top10pitsDessesSellers as (
...
Agora vamos para o Passo 3: pegar as
),
vendas totais desses mesmos PITs
vendaTotalDosTop10pits as (
SELECT s.pit, cast(sum(order_line_total_value) as int64) as gmv
Agora é só questão de incluir mais steps, FROM `b2w-bee-analytics.evaluated_sales.sales` s
aproveitando as tabelas já existentes inner join top10pitsDessesSellers p on s.pit = p.pit
WHERE date(partition_date) >= "2021-01-01"
and payment_status = 'APROVADO'
E um último select pro resultado final:
and marketplace_flag = 'Y'
group by 1
)
with
top10sellers as (
...
),
Agora, o Passo 4 é brincadeira de criança!
top10pitsDessesSellers as (
...
Fazer “um sobre o outro” e calcular a ),
participação dos sellers vendaTotalDosTop10pits as (
...
Os dados já estão todos prontos! )
select p.pit,
(neste exemplo já estamos multiplicando por 100, p.gmv gmv_com_top_10_sellers,
pra dar a porcentagem) t.gmv gmv_total,
round( p.gmv / t.gmv * 100, 2) as participacao
from top10pitsDessesSellers p
inner join vendaTotalDosTop10pits t on p.pit = t.pit
Data Academy B2W DIGITAL
A desvantagem das Subqueries e With é a performance: o uso de memória aumenta muito, e o uso
de índices fica muito restrito
Se a sua query der problemas de estouro de memória, a solução é abrir mão do With: crie tabelas
temporárias, guarde os seus resultados, e apague tudo depois com drop table.
Scripts +
Agendamento +
Data Studio =
seu próprio
monitoramento!
Data Academy B2W DIGITAL
Imagine que você quer pegar diariamente as vendas de um produto específico: PlayStation 5.
Você já tem a query prontinha, pegando as vendas de ontem:
O próximo passo é fazer a bee criar uma tabela pra guardar o resultado de hoje.
É só incluir esta linha antes do seu select: (crie antes um dataset novo pra este exercício!)
Volte pra aba anterior, e logo depois do Select já feito, inclua o seguinte:
● Primeiro a bee pega o dado do dia (de ontem), e guarda na tabela Temporária
● Depois, na tabela de Histórico, ele apaga os dados referentes ao dia de ontem
○ “Mas pra que Sallin?” Só pra garantir que não vai duplicar os dados
● Por fim ele acumula na Histórico o dado do dia (de ontem)
No dia 2, ele pega os dados do dia anterior (dia 1), e acumula na tabela de histórico.
A tabela de histórico vai ficando mais rica, a cada dia que você rodar o script!! dia 2
dia 1
dados de
bee “ontem” dia 30
(a cada dia)
Mas por enquanto, ainda temos que entrar lá e rodar o script, todo dia.
Pra isso podemos agendar o nosso script. A bee cuida de tudo e não esquece nada!
Vamos lá?
Data Academy B2W DIGITAL
Coloque um horário bem cedo! Pode ser de madrugada: a bee não dorme :)
O horário não importa quando são dados D-1. Mas em casos reais
pode haver dependências: outras tabelas que precisam rodar
antes. Na dúvida, consulte o time bee!
2 dias
2 semanas!
Nos primeiros dias ele não terá muitos dados,
mas depois vai ficando mais interessante :)
Data Academy B2W DIGITAL
...
E assim o ciclo se fecha! Fomos à bee, coletamos os dados, configuramos a atualização diária, e fizemos um Dashboard pra
visualizar os dados!
Mas para situações pontuais, como processos temporários e/ou de menor importância, o agendamento da bee resolve bem!
Data Academy B2W DIGITAL
Além da bee
Data Academy B2W DIGITAL
Além da bee
Muitos outros
sistemas usam SQL
Consulte sempre a
documentação!
Data Academy B2W DIGITAL
Além da bee