Processamento de ELT com Couchbase e N1QL

Movimentação de dados entre fontes de dados. Essa é uma das principais atividades dos projetos de integração de dados. Tradicionalmente, as técnicas de movimentação de dados fazem parte de Armazém de dadosBI e análise. Mais recentemente, Big Data, Data Lakes, Hadoop, são participantes frequentes nessa área.

Neste post, discutiremos como a linguagem N1QL do Couchbase pode ser usada para fazer a manipulação maciça dos dados nesse tipo de cenário.

Primeiro, vamos nos lembrar das duas abordagens clássicas ao fazer a movimentação de dados:

ETL (Extrair-Transformar-Carregar). Com esse modelo, os dados são extraído (da fonte de dados original), transformado (os dados são reformatados para caber no sistema de destino) e carregado (no armazenamento de dados de destino).

ELT (Extrair- Carregar-Transformar). Com esse modelo, os dados são extraído (da fonte de dados original), carregado no mesmo formato no sistema de destino. Em seguida, fazemos um transformação no sistema de destino para obter o formato de dados desejado.

Vamos nos concentrar em um ELT neste exemplo. Vamos fazer uma exportação simples de um banco de dados relacional e carregar os dados no Couchbase. Usaremos o Oracle Database como fonte de dados de entrada, com o exemplo clássico de esquema de RH incorporado, que modela um departamento de Recursos Humanos.

Esse é o modelo de dados de origem:

Na primeira etapa, carregaremos os dados com a mesma estrutura. Há uma ferramenta gratuita que você pode usar para realizar essa migração inicial aqui. No final, teremos documentos JSON mapeando esse modelo de tabela:

Por exemplo, um documento de localização terá a seguinte aparência:

Essa foi uma primeira etapa fácil. No entanto, esse mapeamento de tabela para documento costuma ser um projeto ruim no mundo NoSQL. No NoSQL, é comum a desnormalização dos dados em favor de um caminho de acesso mais direto, incorporando dados referenciados. O objetivo é minimizar as interações e junções do banco de dados, buscando o melhor desempenho.

Vamos supor que nosso caso de uso seja motivado por um acesso frequente a todo o histórico de trabalho dos funcionários. Decidimos mudar nosso projeto para esse:

Para locais, estamos unindo em um único documento de local os dados referenciados para país e região.

Para o documento do funcionário, incorporaremos os dados do departamento e incluiremos uma matriz com todo o histórico de trabalho de cada funcionário. Esse suporte de matriz em JSON é uma boa melhoria em relação às referências de chave estrangeira e junções no mundo relacional.

Para o documento de trabalho, manteremos a estrutura original da tabela.

Portanto, temos extraído e carregado os dados, agora vamos transformar nesse modelo para concluir nosso ELT exemplo. Como podemos fazer esse trabalho? Chegou a hora do N1QL

N1QL é a linguagem semelhante ao SQL incluída no Couchbase para acesso e manipulação de dados. Neste exemplo, usaremos dois buckets: HR, que mapeia o esquema original de RH da Oracle, e HR_DNORM, que manterá nosso modelo de documento de destino.

Já carregamos nosso esquema de RH. A próxima etapa é criar um compartimento chamado HR_DNORM. Em seguida, criaremos um índice primário nesse novo bucket:

Agora é hora de criar os documentos de localização. Esses documentos são compostos de locais originais, documentos de país e região:

Alguns aspectos a serem observados:

  • Estamos usando aqui a projeção de uma instrução SELECT para fazer a inserção. Neste exemplo, os dados originais vêm de um bucket diferente.
  • JOINs são usados no bucket original para fazer referência a países e regiões
  • Função IFNULL usada para definir explicitamente um valor nulo para o campo state_province
  • Função TO_STRING aplicada em um campo numérico para fazer referência a uma chave

Nossa amostra original é a seguinte:

Observe que nos livramos de nossas referências location_id e country_id.

Agora é hora de preparar os documentos de nossos funcionários. Faremos isso em várias etapas. A primeira é criar os funcionários a partir do bucket de RH original, incluindo informações sobre o departamento e o cargo real:

Em segundo lugar, usaremos uma construção temporária para criar a matriz de histórico de trabalho:

Agora é fácil atualizar os documentos de nossos funcionários adicionando uma matriz job_history:

Este é o aspecto do nosso documento de funcionário:

Observe a matriz job_history de posições anteriores.

Podemos excluir agora os documentos temporários job_history:

Como última etapa, inserimos os documentos originais dos trabalhos:

Estamos prontos. Este é um exemplo simples, mas mostra o quão poderosa pode ser a manipulação de dados N1QL. Boa migração de dados!

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Manuel Hurtado, engenheiro de soluções, Couchbase

Manuel é engenheiro de soluções Couchbase, com mais de 15 anos de experiência ajudando empresas a arquitetar seus sistemas, como desenvolvedor, consultor, instrutor e gerente de projetos. Tem prazer em aprender no campo como as pessoas usam a tecnologia para obter sucesso.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.