O módulo INFLOR Analytics é um Data Warehouse específico para a solução INFLOR FOREST. Ele contém tabelas Fatos e Dimensões para fornecer aos clientes da INFLOR uma base consistente para construção de relatórios e dashboards através de ferramentas de self-service BI como Microsoft Power BI, Tableau, Qlik Sense, QuickSight, Domo,...
A INFLOR padronizou os nomes dos atributos-chave das tabelas de dimensões. Eles possuem o nome da tabela que termina com a terminação "_id". Por exemplo: A tabela de dimensões dim_material possui o atributo-chave dim_material_id. E é através desse atributo que deverá ser feito o relacionamento entra a tabela fato e a tabela dimensão dim_material.
As tabela fato contém atributos que são medidas de negócios e atributos que são os campos chaves das tabelas de dimensões.
Objetivo.
Nesta FASE 1 do projeto vamos disponibilizar os dados dos schemas Cadastro Florestal e Terras. Os dados serem carregados para o desenvolvimento de datalake para Florestal no databricks, consiste na extração de 16 tabelas, para que as áreas de negocio possam montar seus relatórios. (here)
Recursos Necessários .
Os recursos utilizados devem ser mencionados para apoio no entendimento e desenvolvimento. Abaixo segue a lista de todos os insumos utilizados para o estabelecimento deste projeto:
Notebook do Databricks para extração dos dados do DB MsSQL Server.
Jira: este sistema pode ser usado para a consulta do Card DGA - 709 a qual apresenta todas as informações do projeto e o commit dos notebooks do Databricks.
Desenvolvimento da carga de arquivos
Lista de tabelas para ingestão.
dbTableCadastroFlorestalMsSql = ["FACT_CONSOLIDATED_STAND","FACT_STAND","FACT_STAND_TIMBER_CERTIFICATION","FACT_STAND_WOOD_CHARACTERISTIC"]
dbTableTerrasMsSql = ["FACT_FARM","FACT_FARM_PERSON","FACT_LAND_CONTRACT","FACT_LAND_CONTRACT_FARM","FACT_LAND_CONTRACT_LAND_DOCUMENTATION","FACT_LAND_CONTRACT_PAYMENT","FACT_LAND_DOCUMENTATION","FACT_LAND_DOCUMENTATION_CONDITIONS","FACT_LAND_DOCUMENTATION_LAND_USE","FACT_LAND_DOCUMENTATION_PERSON","FACT_LAND_DOCUMENTATION_REGISTRATION","FACT_LICENSE"]Parâmetros de conexão.
host = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "HOST")
port = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "PORT")
dbDatabase = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "DATABASE")
user = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "USER")
password = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "PASSWORD")
driver = "com.microsoft.sqlserver.jdbc.spark"
server_name = f"jdbc:sqlserver://{host}:{port}"
url = server_name + ";" + "databaseName=" + dbDatabase + ";"
dbDatabaseTarget = "INFLOR_ANL_DEXCO"Leitura e escrita dos dados.
def read_dbTableList(schema, dbTableList):
for table in dbTableList:
df = spark.read.format("jdbc")\
.option("url", url)\
.option("dbtable", table)\
.option("user", user)\
.option("password", password)\
.option("ssl", True)\
.option("sslmode", "require")\
.load()
df.write.format("delta")\
.mode("overwrite")\
.option("overwriteSchema", "true")\
.saveAsTable(dbDatabaseTarget+"."+schema+"_"+table)
print(schema+"_"+table + " was created successfully.")
for schema in schemaList:
if schema == "cadastro_florestal":
read_dbTableList(schema, dbTableCadastroFlorestalMsSql)
else:
read_dbTableList(schema, dbTableTerrasMsSql) Tabelas inseridas no databricks.
Schema : cadastro_florestal e terra