Open fjuniorr opened 9 months ago
Esboço inicial para a declaração da link table em um arquivo de configuração relationships.toml
[keys]
"chave_rec" = ["ANO", "UO_COD", "FONTE_COD", "MDE"]
"chave_desp" = ["ANO", "UO_COD", "FUNCAO_COD", "ACAO_COD", "GRUPO_COD", "FONTE_COD", "IPU_COD", "MDE"]
[packages.reest]
"reest_rec" = "chave_rec"
"reest_desp" = "chave_desp"
[packages.sisor]
"base_orcam_receita_fiscal" = "chave_rec"
"base_qdd_fiscal" = "chave_desp"
"base_orcam_despesa_item_fiscal" = "chave_desp"
Um snippet quase funcional em R
library(frictionless)
library(data.table)
library(relatorios)
library(spreadmart)
library(purrr)
library(glue)
create_fact_table_ <- function(resource_name, package_name, config) {
datapackage <- read_package(glue("datapackages/{package_name}/datapackage.json"))
resource <- read_resource(datapackage, resource_name) |> as.data.table()
key_name <- config$packages[[package_name]][[resource_name]]
create_fact_table(resource, config$keys[key_name])
}
create_fact_tables <- function(package_name, config) {
map(names(config$packages[[package_name]]), create_fact_table_, package_name, config)
}
config <- RcppTOML::parseTOML("relationships.toml")
fact_tables <- map(names(config$packages), create_fact_tables, config)
# does not work yet
link_table <- create_link_table(fact_tables, keys = config$keys)
Mas definitivamente essa funcionalidade deve fazer parte do dpm (https://github.com/splor-mg/dpm/issues/59) e portanto uma conversão para python será necessária.
does not work yet
Why?? Please do tell
Vai ser necessário adicionar uma etapa para geração do datapackage.json
raiz após alterações em relationships.toml
frictionless describe data/*.csv --type package --json > datapackage.json
Caso contrário o dpm load
não vai ser capaz de fazer carga no banco de dados.
Na reunião gerencial de 10/06 discutimos a ideia que seria interessante poder fazer uma definição de chaves com referência a chaves pré-existentes para permitir uma melhor compreensão do relacionamento entre elas. Por exemplo:
[keys]
"chave_rec" = ["ANO", "UO_COD", "FONTE_COD", "MDE"]
"chave_rec_reest" = [chave_rec, -"MDE"] # exclusão de colunas
"chave_desp" = [chave_rec, "FUNCAO_COD", "ACAO_COD", "GRUPO_COD", "IPU_COD"] # inclusão de colunas
Vamos avaliar o quanto sentimentos falta disso em https://github.com/splor-mg/atividades/issues/126
Atualmente inserir uma nova base de dados na link table demanda diversas alterações manuais no script scripts/transform.R.
Faz sentido otimizarmos essa operação focando em:
relatorios
nas bases;