Slowly Change Dimension em um DW com Hive e Spark

Um dos mais amplos usos do Hadoop atualmente é construir uma plataforma de Data Warehousing sobre um Data Lake, através do Apache Hive.

Slowly Changing Dimension(SCD) é um termo utilizado em teorias de Data Management e Data Warehousing para grupos de dados lógicos como informações de produtos, clientes, etc. que mudam lentamente ao longo do tempo. Nesse exemplo vou implementar o SCD tipo 2 em uma tabela no DW do Hive utilizando o Apache Spark.

Mas o que é SCD tipo 2?

O SCD Tipo 2 é a técnica mais utilizada para atualizações de dimensões. Nesse tipo de SCD é adicionado um novo registro com as mudanças, preservando sempre os dados anteriores. Dessa forma, os registros da tabela fato vão apontar para a versão correspondente nas dimensões de acordo com a data de referência.

Vamos ao exemplo!

Temos uma tabela atual:


Novos dados para serem atualizados:


Tabela resultante:


O que mudou?

- A cliente Joana não teve alterações, portanto manteve o registro.

- João e Gabriela tiveram seus dados alterados, logo novos registros são lançados.

- Ricardo não está na nova carga. É um caso de exclusão.

Para começar, vou fazer uma ingestão de dados do MySQL para o Hive, importando a tabela ‘clientes’ utilizando o Apache Sqoop. Obs.: É necessário que seja criada a database ‘companydb’ no Hive.

sqoop import --connect jdbc:mysql://localhost:3306/companydb?serverTimezone=UTC --username root --password xxx --m 1 --table clientes --hive-import --hive-database  companydb
			

Pode também ser utilizado a comando import-all-tables para importar todas as tabelas do db do MySQL.

sqoop import-all-tables --connect jdbc:mysql://localhost:3306/companydb?serverTimezone=UTC --username root --password xxx –m --hive-import --hive-database  companydb
		

Aqui é informado endereço do meu banco de dados no MySQL, a tabela a ser importada e o direcionamento para o banco de dados ‘companydb’ no Hive. Para conseguir realizar esse processo, tive que configurar dois elementos antes:

- Configurar o MySQL como metadados do Hive. Por padrão o Hive usa o Apache Derby como gerenciador do metastore, que é um pouco limitado comparado ao MySQL. Segue link de referência da configuração aqui.

- Baixar o arquivo hive-common-0.10.0.jar e colocar na pasta de libs do sqoop.


Após a importação let's code com Pyspark:


E o resultado final: