Data Engineer
Que métodos (tipos) de armazenamento de histórico de dados conhece? Como é acumulada a história nas tabelas?
Tarefa de design de arquitetura de microsserviços: como fornecer dados para a tabela de pedidos (produtos, preços, pedidos) no frontend quando há três microsserviços separados?
No que diz respeito à consulta, podemos ver o que acontece com os dados, incluindo quais tipos de joins — quais tipos de joins podemos ver lá?
Análise da atividade dos utilizadores em campanhas publicitárias A empresa mantém um registo de eventos relacionados com campanhas publicitárias. São fornecidas duas tabelas: • campaigns — lista de campanhas publicitárias com os seus identificadores e nomes; • events — eventos de utilizadores por campanha com informações sobre o tipo de evento (por exemplo, 'click' (clique na publicidade)) e o tempo. É necessário criar um relatório para cada campanha com os seguintes indicadores: • Número total de eventos. • Número de utilizadores únicos que realizaram eventos. • Hora do primeiro e do último evento por campanha. • Classificação da campanha por ordem decrescente do número total de eventos. A classificação é um número atribuído a cada linha no conjunto de resultados com base na ordem dos dados. Se duas ou mais linhas tiverem o mesmo valor, recebem a mesma classificação, mas a classificação seguinte é pulada. O relatório deve incluir apenas campanhas que tiveram eventos: campanhas sem eventos não são consideradas. O relatório final deve ser ordenado primeiro pela classificação da campanha em ordem crescente, e depois por campaign_name em ordem alfabética. Formato de entrada • campaign_name (string) — nome da campanha publicitária • start_date (timestamp) — data e hora de início da campanha • end_date (timestamp) — data de fim da campanha Tabela events: • event_id (int) — identificador único do evento • user_id (int) — identificador único do utilizador que realizou o evento • campaign_id (int) — identificador único da campanha • event_type (string) — tipo de evento, por exemplo 'click' ou 'conversion' • event_time (timestamp) — data e hora do evento Os dados não contêm valores em falta ou incorretos. Formato de saída A consulta deve retornar uma tabela com os campos nesta ordem: • campaign_name (string) — nome da campanha publicitária • total_events (int) — número total de eventos relacionados com a campanha • unique_users (int) — número de utilizadores únicos que realizaram eventos • first_event_time (timestamp) — data e hora do primeiro evento da campanha • last_event_time (timestamp) — data e hora do último evento da campanha • campaign_rank (int) — classificação da campanha por ordem decrescente do número total de eventos Ordene os dados por classificação da campanha em ordem crescente, e depois por campaign_name em ordem alfabética.
Quais estratégias de carregamento incremental no dbt utilizou?
Como encontrar uma substring numa coluna específica de um ficheiro de log no Linux (por exemplo, a data na terceira coluna)?
Que verificações de qualidade de dados foram realizadas no Data Vault?
O que é tipagem dinâmica?
Você está familiarizado com a metodologia Domain Driven Design (DDD)? Se sim, compartilhe exemplos de sua aplicação em seus projetos.
Como ler um arquivo de 100 gigabytes em Python?
Qual é a diferença entre CTE e uma subconsulta?
Quais são os formatos de distribuição no Greenplum além de BY column e RANDOMLY?
Qual é a diferença entre particionamento e sharding?
Escreve um DAG simples para Apache Airflow
Conhece os cubos OLAP? Quando trabalhamos com dados multidimensionais, semelhantes a uma tabela dinâmica no Excel, mas para uma interação mais rápida com grandes volumes de dados.
O que é um decorador em Python e para que é utilizado (no contexto do Airflow)?
Que JOINs físicos conheces?
Já trabalhou com cargas incrementais e completas? Como lidou com os duplicados?
SELECIONAR * FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.date_start > t2.date_start --DML CRIAR TABELA SE NÃO EXISTIR Employee (id int, salary int, departmentId int); INSERT INTO Employee (id,salary,departmentId) VALUES (1, 70000, 1),(2, 94000, 1),(3, 85000, 1),(4, 80000, 2),(5, 60000, 2),(6, 62000, 3),(7, 90000, 3),(8, 94000, 3),(9, 94000, 3); com cte como( select *, rank() over(partition by departmentId order by salary desc) as max_salary from Employee ) select * from cte where max_salary = 1
Fala-me sobre o Greenplum — formatos de armazenamento de dados, armazenamento em linha e colunar.