melhorando otimizações de dados
All checks were successful
API and ETL Build / build_etl (push) Successful in 41s
API and ETL Build / build_api (push) Successful in 46s

This commit is contained in:
Jose Henrique 2025-06-18 21:27:27 -03:00
parent 4c72a68481
commit f16e1e5e5d
2 changed files with 28 additions and 5 deletions

View File

@ -94,7 +94,7 @@ namespace OpenCand.API.Services
{
return groupBy.ToLower() switch
{
"candidato" => "SELECT src.idcandidato, c.nome, src.ano, SUM(src.valor) as valor",
"candidato" => "SELECT src.idcandidato, cm.nome, src.ano, SUM(src.valor) as valor",
"partido" => "SELECT cm.sgpartido, src.ano, SUM(src.valor) as valor",
"uf" => "SELECT cm.siglauf, src.ano, SUM(src.valor) as valor",
"cargo" => "SELECT cm.cargo, src.ano, SUM(src.valor) as valor",
@ -117,8 +117,8 @@ namespace OpenCand.API.Services
{
return groupBy.ToLower() switch
{
"candidato" => "JOIN candidato c ON src.idcandidato = c.idcandidato JOIN candidato_mapping cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano AND cm.turno = '1'",
"partido" or "uf" or "cargo" => "JOIN candidato_mapping cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano AND cm.turno = '1'",
"candidato" => "JOIN mv_candidato_mapping_analytics cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano",
"partido" or "uf" or "cargo" => "JOIN mv_candidato_mapping_analytics cm ON src.idcandidato = cm.idcandidato AND src.ano = cm.ano",
_ => throw new ArgumentException("Invalid group by specified.")
};
}
@ -147,7 +147,7 @@ namespace OpenCand.API.Services
if (filter.Ano.HasValue)
{
var paramName = $"ano{++_paramCounter}";
conditions.Add($"src.ano = @{paramName}");
conditions.Add($"cm.ano = @{paramName}");
_parameters[paramName] = filter.Ano.Value;
}
@ -165,7 +165,7 @@ namespace OpenCand.API.Services
{
return groupBy.ToLower() switch
{
"candidato" => "GROUP BY src.idcandidato, c.nome, src.ano",
"candidato" => "GROUP BY src.idcandidato, cm.nome, src.ano",
"partido" => "GROUP BY cm.sgpartido, src.ano",
"uf" => "GROUP BY cm.siglauf, src.ano",
"cargo" => "GROUP BY cm.cargo, src.ano",

View File

@ -67,3 +67,26 @@ GROUP BY
siglauf,
cargo;
CREATE INDEX idx_mv_receitas_candidato ON mv_receitas_candidato (ano, idcandidato, siglauf, sgpartido, cargo);
---
--- View for candidate mapping summary
CREATE MATERIALIZED VIEW mv_candidato_mapping_analytics AS
SELECT DISTINCT cm.idcandidato, c.nome, cm.ano, cm.turno, cm.sgpartido, cm.siglauf, cm.cargo
FROM candidato_mapping cm
JOIN candidato c ON cm.idcandidato = c.idcandidato
WHERE cm.turno = '1';
CREATE INDEX idx_mv_candidato_mapping_analytics ON mv_candidato_mapping_analytics (idcandidato, ano);
-- Refresh the materialized views to ensure they are up-to-date
REFRESH MATERIALIZED VIEW mv_bem_candidato;
REFRESH MATERIALIZED VIEW mv_despesas_candidato;
REFRESH MATERIALIZED VIEW mv_receitas_candidato;
REFRESH MATERIALIZED VIEW mv_candidato_mapping_analytics;
-- Force re-analyze the materialized views to update statistics
ANALYZE mv_bem_candidato;
ANALYZE mv_despesas_candidato;
ANALYZE mv_receitas_candidato;
ANALYZE mv_candidato_mapping_analytics;