/
DGA-709 | Projeto Inflor

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.

1dbTableCadastroFlorestalMsSql = ["FACT_CONSOLIDATED_STAND","FACT_STAND","FACT_STAND_TIMBER_CERTIFICATION","FACT_STAND_WOOD_CHARACTERISTIC"] 2 3dbTableTerrasMsSql = ["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.

1host = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "HOST") 2port = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "PORT") 3dbDatabase = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "DATABASE") 4user = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "USER") 5password = dbutils.secrets.get(scope = "DATABASE-INFLOR-PRD", key = "PASSWORD") 6 7driver = "com.microsoft.sqlserver.jdbc.spark" 8 9server_name = f"jdbc:sqlserver://{host}:{port}" 10url = server_name + ";" + "databaseName=" + dbDatabase + ";" 11 12dbDatabaseTarget = "INFLOR_ANL_DEXCO"


Leitura e escrita dos dados.

1def read_dbTableList(schema, dbTableList): 2 for table in dbTableList: 3 df = spark.read.format("jdbc")\ 4 .option("url", url)\ 5 .option("dbtable", table)\ 6 .option("user", user)\ 7 .option("password", password)\ 8 .option("ssl", True)\ 9 .option("sslmode", "require")\ 10 .load() 11 12 df.write.format("delta")\ 13 .mode("overwrite")\ 14 .option("overwriteSchema", "true")\ 15 .saveAsTable(dbDatabaseTarget+"."+schema+"_"+table) 16 17 print(schema+"_"+table + " was created successfully.") 18 19for schema in schemaList: 20 if schema == "cadastro_florestal": 21 read_dbTableList(schema, dbTableCadastroFlorestalMsSql) 22 else: 23 read_dbTableList(schema, dbTableTerrasMsSql)


Tabelas inseridas no databricks.

Schema : cadastro_florestal e terra