Data Engineer
Como proceder em caso de desequilíbrio (skew) em user_id ao fazer JOIN entre tabelas de transações e usuários? Como escolher a chave de distribuição ideal?
Como escolher a chave de sharding correta para uma distribuição uniforme dos dados?
Como procederias com a cadeia de Materialized View através de uma tabela intermédia ReplacingMergeTree para preencher corretamente os dados já existentes antes de lançar a nova MV?
Como carregar dados do Kafka para o ClickHouse através de streaming para relatórios em tempo real?
Qual é a complexidade algorítmica da pesquisa num dicionário no pior caso?
Fala-me um pouco sobre a tua experiência e o que estudaste.
Como obter o último nome completo de cada cliente, se apenas a data de início é conhecida (a data de fim não é conhecida)?
O que é uma chave primária no ClickHouse e como ela difere de uma chave primária em bancos de dados tradicionais?
Qual é a diferença entre os comandos docker run e docker exec?
O que é o otimizador Catalyst no Spark e quais exemplos específicos de otimizações ele realiza (por exemplo, predicate pushdown)?
Qual é a complexidade algorítmica para obter um elemento por chave de um dicionário (dict) em Python?
Como comparar a tabela original ("live") e a tabela de destino se a fonte está constantemente a mudar?
Como rastrear em qual execução do DAG uma linha específica apareceu no Data Vault?
Análise de vendas por categorias de produtos numa loja de retalho Trabalha como analista numa loja de retalho. A tua tarefa é criar um relatório de vendas por categorias de produtos com os seguintes cálculos: • quantidade total de unidades vendidas na categoria (total_units_sold); • receita total por categoria, considerando descontos, onde o desconto é calculado como unit_price × units_sold × (1 − discount/100). Se não houver desconto (NULL), considerar 0%. Arredondar para duas casas decimais; • média de unidades vendidas por venda (avg_units_per_sale), arredondada a duas casas decimais; • proporção de vendas sem desconto (no_discount_share) — número de vendas com NULL ou 0% de desconto, dividido pelo total de vendas na categoria, arredondado a três casas decimais. Ordena primeiro pelos resultados de maior receita total (total_revenue), depois por média de unidades por venda (avg_units_per_sale) em ordem crescente, e por último pelo nome da categoria em ordem alfabética. Formato de entrada Tabela sales: • sale_id (int) — identificador único de venda • product_id (int) — identificador do produto • category (text) — categoria do produto • sale_date (timestamp) — data e hora da venda • units_sold (int) — unidades vendidas • unit_price (numeric) — preço por unidade • discount (numeric) — desconto em percentagem, pode ser NULL A coluna discount pode conter valores nulos. Formato de saída A consulta deve retornar uma tabela com os seguintes campos na seguinte ordem: • category (text) — categoria do produto • total_units_sold (int) — quantidade total de unidades vendidas na categoria • total_revenue (numeric) — receita total por categoria, arredondada a duas casas decimais • avg_units_per_sale (numeric) — média de unidades por venda, arredondada a duas casas decimais • no_discount_share (numeric) — proporção de vendas sem descontos (valor entre 0 e 1), arredondada a três casas decimais O resultado deve ser ordenado primeiro por total_revenue em ordem descendente, depois por avg_units_per_sale em ordem crescente, e finalmente por categoria em ordem alfabética.
Fala sobre a tua experiência na X5: o que fizeste na parte de DWH?
Como é que os dados entram no armazenamento no seu local de trabalho atual?
O armazenamento foi construído de acordo com o esquema Data Vault — você também o desenvolveu, manteve? Adicionou hubs, links manualmente?
Por que decidiu entrar no mercado e deixar o seu emprego atual?
Você está trabalhando em uma nova funcionalidade na branch dev. De repente, surge a necessidade de mudar rapidamente para a branch main para corrigir um erro de digitação no arquivo README.md. Você tem algumas alterações não indexadas: em src/feature.js (não indexado) e styles/main.css (indexado). Você quer salvar temporariamente todas essas alterações para depois voltar a elas na branch dev. Qual sequência de comandos você deve usar para isso? git stash save "WIP on feature" && git checkout main && [fix] && git checkout dev && git stash pop git stash push -m "WIP on feature" && git checkout main && [fix] && git checkout dev && git stash pop git stash && git checkout main && [fix] && git checkout dev && git stash apply git add . && git stash && git checkout main && [fix] && git checkout dev && git stash drop git commit -m "Temp commit" && git checkout main && [fix] && git checkout dev && git reset HEAD^
O que é uma View Materializada e como ela difere de uma View normal?