Giter VIP home page Giter VIP logo

lighthouse-indicium-code-challenge's Introduction

Indicium Tech Code Challenge

Desafio de código para Desenvolvedor de Software com foco em projetos de dados.

Context

Na Indicium temos muitos projetos onde desenvolvemos todo o pipeline de dados do nosso cliente, desde a extração de dados de diversas fontes de dados até o carregamento desses dados em seu destino final, sendo que esse destino final varia desde um data warehouse para uma ferramenta de Business Intelligence até uma API para integração com sistemas de terceiros.

Como desenvolvedor de software com foco em projetos de dados, sua missão é planejar, desenvolver, implantar e manter um pipeline de dados.

The Challenge

Forneceremos 2 fontes de dados, um banco de dados PostgreSQL e um arquivo CSV.

O arquivo CSV representa detalhes de pedidos de um sistema de comércio eletrônico.

O banco de dados fornecido é um banco de dados de amostra fornecido pela Microsoft para fins educacionais chamado Northwind. A única diferença é que a tabela order_detail não existe neste banco de dados que você está recebendo. Esta tabela order_details é representada pelo arquivo CSV que fornecemos.

Esquema do banco de dados Northwind original:

image

Seu desafio é construir um pipeline que extraia os dados todos os dias de ambas as fontes e grave os dados primeiro no disco local e depois em um banco de dados PostgreSQL. Para este desafio, o arquivo CSV e o banco de dados serão estáticos, mas em qualquer projeto do mundo real, ambas as fontes de dados mudariam constantemente.

É importante que todas as etapas de gravação (gravação de dados de entradas no sistema de arquivos local e gravação de dados do sistema de arquivos local no banco de dados PostgreSQL) sejam isoladas umas das outras, você deve ser capaz de executar qualquer etapa sem executar as outras.

Para a primeira etapa, onde você grava dados no disco local, você deve gravar um arquivo para cada tabela. Este pipeline será executado todos os dias, portanto deve haver uma separação nos caminhos dos arquivos que você criará para cada combinação de origem (CSV ou Postgres), tabela e dia de execução, por exemplo:

/data/postgres/{table}/2024-01-01/file.format
/data/postgres/{table}/2024-01-02/file.format
/data/csv/2024-01-02/file.format

Você é livre para escolher o nome e o formato do arquivo que deseja salvar.

Na etapa 2, você deve carregar os dados do sistema de arquivos local que você criou para o banco de dados final.

O objetivo final é poder executar uma consulta que mostre os pedidos e seus detalhes. Os pedidos são colocados em uma tabela chamada orders no banco de dados postgres Northwind. Os detalhes são colocados no arquivo csv fornecido e cada linha possui um campo order_id apontando para a tabela orders.

Solution Diagram

Como o Indicium utiliza algumas ferramentas padrão, o desafio foi pensado para ser realizado utilizando algumas dessas ferramentas.

As seguintes ferramentas devem ser usadas para resolver este desafio.

Scheduler:

Data Loader:

Database:

A solução deve ser baseada nos diagramas abaixo: image

Requirements

  • Você deve usar as ferramentas descritas acima para completar o desafio.
  • Todas as tarefas devem ser independentes, você deve poder executar o pipeline todos os dias e, neste caso onde os dados são estáticos, a saída deve ser a mesma.
  • A etapa 2 depende de ambas as tarefas da etapa 1, portanto você não poderá executar a etapa 2 por um dia se as tarefas da etapa 1 não forem bem-sucedidas.
  • Você deve extrair todas as tabelas do banco de dados de origem, não importa que você não utilizará a maioria delas para a etapa final.
  • Você deve ser capaz de dizer claramente onde o pipeline falhou, para saber em qual etapa deve executar novamente o pipeline.
  • Você deve fornecer instruções claras sobre como executar todo o pipeline. Quanto mais fácil, melhor.
  • Você deve fornecer evidências de que o processo foi concluído com sucesso, ou seja, você deve fornecer um csv ou json com o resultado da consulta descrita acima.
  • Você deve assumir que funcionará em dias diferentes, todos os dias.
  • Seu pipeline deve estar preparado para ser executado nos dias anteriores, o que significa que você poderá passar um argumento para o pipeline com um dia anterior e ele deverá reprocessar os dados desse dia. Como os dados deste desafio são estáticos, a única diferença para cada dia de execução serão os caminhos de saída.

Coisas importantes

  • Código limpo e organizado.
  • Boas decisões em qual etapa (qual banco de dados, qual formato de arquivo...) e bons argumentos para apoiar essas decisões.
  • O objetivo do desafio não é apenas avaliar o conhecimento técnico na área, mas também a capacidade de buscar informações e utilizá-las para resolver problemas com ferramentas que não necessariamente são do conhecimento do candidato.
  • Ferramentas de apontar e clicar não são permitidas.

Obrigado por participar!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.