graph TD;
subgraph "Arquivos Excel de Origem"
F1[01-Inscricao_Cadastro.xlsx]
F2[02-Historico_Gleba.xlsx]
F3[03-Correcao_Solo_Gessagem.xlsx]
F4[04-Implantacao_Agricola.xlsx]
F5[05-Tratamento_Semente.xlsx]
F6[06-Adubacao.xlsx]
F7[07-Agroquimicos.xlsx]
F8[08-Tecnologia.xlsx]
F9[09a-Inscricao_Produtor_Colheita.xlsx]
F10[09b-Inscricao_Auditoria_Colheita.xlsx]
end
subgraph "Tabelas Brutas ClickHouse"
T1[data_1ff7e43b5326d657<br/>TABELA 01 - Inscricao_Cadastro]
T2[data_75824b7d2b020578<br/>TABELA 02 - Historico_Gleba]
T3[data_f42e897a8f38c330<br/>TABELA 03 - Correcao_Solo_Gessagem]
T4[data_e19f5744bfe42156<br/>TABELA 04 - Implantacao_Agricola]
T5[data_f3757437febc5061<br/>TABELA 05 - Tratamento_Semente]
T6[data_1cf2ddc898ffcb9f<br/>TABELA 06 - Adubacao]
T7[data_e24603e96594e2dc<br/>TABELA 07 - Agroquimicos]
T8[data_9932a19fc714fba7<br/>TABELA 08 - Tecnologia]
T9[data_1a50f4ac2d4169fe<br/>TABELA 09 - Inscricao_Produtor_Colheita]
T10[data_3910f69bac299cf3<br/>TABELA 10 - Inscricao_Auditoria_Colheita]
end
subgraph "Tabelas de Dimensão"
D1[DIM_PRODUTOR]
D2[DIM_CONSULTOR]
D3[DIM_PROPRIEDADE]
D4[DIM_INSCRICAO]
D5[DIM_TEMPO]
D6[DIM_SOLO]
D7[DIM_CULTURA_CICLO]
D8[DIM_TECNOLOGIA_AGRICOLA]
D9[DIM_AUTOR]
D10[DIM_DENSIDADE]
D11[DIM_CUSTOS]
D12[DIM_RANKING_COMPETICAO]
end
subgraph "Tabelas de Fatos"
FACT1[FATO_INSCRICAO]
FACT2[FATO_PLANTACAO]
FACT3[FATO_TECNOLOGIA]
FACT4[FATO_SOLO]
FACT5[FATO_AUDITORIA_COLHEITA]
end
subgraph "Camada Power BI"
PBI1[Visão Cubo de Dados Mestre]
PBI2[Visão Desempenho Ano a Ano]
PBI3[Painel de Produtividade]
PBI4[Painel de Análise de Custos]
end
%% Conexões Arquivo para Tabela
F1 --> T1
F2 --> T2
F3 --> T3
F4 --> T4
F5 --> T5
F6 --> T6
F7 --> T7
F8 --> T8
F9 --> T9
F10 --> T10
%% Tabelas para Dimensões
T1 --> D1
T1 --> D2
T1 --> D3
T1 --> D4
T1 --> D5
T1 --> D9
T2 --> D6
T3 --> D6
T4 --> D7
T5 --> D7
T8 --> D8
T9 --> D11
T10 --> D10
T10 --> D12
%% Tabelas para Fatos
T1 --> FACT1
T9 --> FACT1
T4 --> FACT2
T9 --> FACT2
T8 --> FACT3
T2 --> FACT4
T3 --> FACT4
T10 --> FACT5
T9 --> FACT5
%% Fatos para Power BI
FACT1 --> PBI1
FACT2 --> PBI1
FACT3 --> PBI1
FACT4 --> PBI1
FACT5 --> PBI1
FACT1 --> PBI2
FACT2 --> PBI2
FACT5 --> PBI2
FACT1 --> PBI3
FACT2 --> PBI3
FACT5 --> PBI3
FACT2 --> PBI4
FACT5 --> PBI4
%% Estilização
style F1 fill:#e1f5fe
style F2 fill:#e1f5fe
style F3 fill:#e1f5fe
style F4 fill:#e1f5fe
style F5 fill:#e1f5fe
style F6 fill:#e1f5fe
style F7 fill:#e1f5fe
style F8 fill:#e1f5fe
style F9 fill:#e1f5fe
style F10 fill:#e1f5fe
style T1 fill:#fff3e0
style T2 fill:#fff3e0
style T3 fill:#fff3e0
style T4 fill:#fff3e0
style T5 fill:#fff3e0
style T6 fill:#fff3e0
style T7 fill:#fff3e0
style T8 fill:#fff3e0
style T9 fill:#fff3e0
style T10 fill:#fff3e0
style D1 fill:#c8e6c9
style D2 fill:#c8e6c9
style D3 fill:#c8e6c9
style D4 fill:#c8e6c9
style D5 fill:#c8e6c9
style D6 fill:#c8e6c9
style D7 fill:#c8e6c9
style D8 fill:#c8e6c9
style D9 fill:#c8e6c9
style D10 fill:#c8e6c9
style D11 fill:#c8e6c9
style D12 fill:#c8e6c9
style FACT1 fill:#ffcdd2
style FACT2 fill:#ffcdd2
style FACT3 fill:#ffcdd2
style FACT4 fill:#ffcdd2
style FACT5 fill:#ffcdd2
style PBI1 fill:#e1bee7
style PBI2 fill:#e1bee7
style PBI3 fill:#e1bee7
style PBI4 fill:#e1bee7
graph LR;
subgraph "Ingestão de Dados"
A[Upload de Arquivos Excel] --> B[Armazenamento MinIO]
B --> C[Tabela de Rastreamento de Arquivos]
end
subgraph "Processamento de Dados"
C --> D[Detecção de Estrutura]
D --> E[Transformação JSON]
E --> F[Tabelas ClickHouse]
end
subgraph "Modelagem de Dados"
F --> G[Consultas CTE]
G --> H[Tabelas de Dimensão]
G --> I[Tabelas de Fatos]
end
subgraph "Camada de Análise"
H --> J[Consulta Direta Power BI]
I --> J
J --> K[Painéis e Relatórios]
end
style A fill:#b3e5fc
style B fill:#b3e5fc
style C fill:#b3e5fc
style D fill:#ffecb3
style E fill:#ffecb3
style F fill:#ffecb3
style G fill:#c5e1a5
style H fill:#c5e1a5
style I fill:#c5e1a5
style J fill:#f8bbd0
style K fill:#f8bbd0
erDiagram
FATO_INSCRICAO ||--o{ DIM_PRODUTOR : "Id_Produtor"
FATO_INSCRICAO ||--o{ DIM_CONSULTOR : "Id_Consultor"
FATO_INSCRICAO ||--o{ DIM_PROPRIEDADE : "Nome_Propriedade"
FATO_INSCRICAO ||--o{ DIM_INSCRICAO : "Inscricao"
FATO_INSCRICAO ||--o{ DIM_TEMPO : "Safra"
FATO_PLANTACAO ||--o{ DIM_INSCRICAO : "Inscricao"
FATO_PLANTACAO ||--o{ DIM_CUSTOS : "Custo_Total_ha"
FATO_PLANTACAO ||--o{ DIM_CULTURA_CICLO : "Ciclo_Maturacao"
FATO_TECNOLOGIA ||--o{ DIM_INSCRICAO : "Inscricao"
FATO_TECNOLOGIA ||--o{ DIM_PLANTADEIRA : "Plantadeira_Fabricante"
FATO_TECNOLOGIA ||--o{ DIM_PULVERIZADOR : "Pulverizador_Fabricante"
FATO_TECNOLOGIA ||--o{ DIM_COLHEDORA : "Colhedora_Fabricante"
FATO_SOLO ||--o{ DIM_INSCRICAO : "Inscricao"
FATO_SOLO ||--o{ DIM_SOLO : "Tipo_Solo"
FATO_SOLO ||--o{ DIM_MANEJO_SOLO : "Revolvimento_Solo"
DIM_PRODUTOR {
string Id_Produtor PK
string Nome_Produtor
string CPF_CNPJ_Produtor
date Data_Nascimento_Produtor
string Genero_Produtor
string Cidade_Produtor
string UF_Produtor
string Regiao_Produtor
}
DIM_CONSULTOR {
string Id_Consultor PK
string Nome_Consultor
string CPF_CNPJ_Consultor
date Data_Nascimento_Consultor
string Genero_Consultor
string Regiao_Consultor
}
DIM_PROPRIEDADE {
string Nome_Propriedade PK
string Registro_CAR_Propriedade
string Cidade_Propriedade
string UF_Propriedade
string Regiao_Propriedade
float Area_Agricultavel
float Area_Cultivada_Soja
}
DIM_INSCRICAO {
string Inscricao PK
string BD_Origem
string Safra
string Categoria
string Titulo
string Status_Classificacao
}
DIM_TEMPO {
string Safra PK
date Data_Semeadura
int Ano
int Mes
int Trimestre
}
FATO_INSCRICAO {
string Inscricao FK
float Total_Area_Cultivada_Soja
float Produtividade_Final_sc_ha
float Produtividade_Media_kg_ha
}
FATO_PLANTACAO {
string Inscricao FK
float Populacao_Plantas_ha
float Media_Vagens_Planta
float Custo_Total_ha
float Custo_Total_sc
}
FATO_TECNOLOGIA {
string Inscricao FK
float Velocidade_Plantadeira
float Velocidade_Pulverizador
float Velocidade_Colhedora
int Numero_Linhas
}
Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "SELECT DISTINCT
JSON_VALUE(data, '$.Id_Produtor') AS Id_Produtor,
JSON_VALUE(data, '$.Nome_Produtor') AS Nome_Produtor,
JSON_VALUE(data, '$.CPF_CNPJ_Produtor') AS CPF_CNPJ_Produtor,
JSON_VALUE(data, '$.Data_Nascimento_Produtor') AS Data_Nascimento_Produtor,
JSON_VALUE(data, '$.Genero_Produtor') AS Genero_Produtor,
JSON_VALUE(data, '$.Cidade_Produtor') AS Cidade_Produtor,
JSON_VALUE(data, '$.UF_Produtor') AS UF_Produtor,
JSON_VALUE(data, '$.Regiao_Produtor') AS Regiao_Produtor
FROM cesb_data.data_1ff7e43b5326d657
WHERE JSON_VALUE(data, '$.Id_Produtor') IS NOT NULL
LIMIT 5 FORMAT TabSeparated"Resultado de Exemplo:
67894 NOEDIR JOSE KARAM MARCONDES MASCULINO MT
62941 DOUGLAS CRESTANI CRESTANI MASCULINO MT
67893 GUILHERME RUFATTO MASCULINO PR
✅ Consulta funciona com sucesso
Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "SELECT DISTINCT
JSON_VALUE(data, '$.Id_Consultor') AS Id_Consultor,
JSON_VALUE(data, '$.Nome_Consultor') AS Nome_Consultor,
JSON_VALUE(data, '$.CPF_CNPJ_Consultor') AS CPF_CNPJ_Consultor,
JSON_VALUE(data, '$.Data_Nascimento_Consultor') AS Data_Nascimento_Consultor,
JSON_VALUE(data, '$.Genero_Consultor') AS Genero_Consultor,
JSON_VALUE(data, '$.Cidade_Consultor') AS Cidade_Consultor,
JSON_VALUE(data, '$.UF_Consultor') AS UF_Consultor,
JSON_VALUE(data, '$.Regiao_Consultor') AS Regiao_Consultor
FROM cesb_data.data_1ff7e43b5326d657
WHERE JSON_VALUE(data, '$.Id_Consultor') IS NOT NULL FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "SELECT DISTINCT
JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
JSON_VALUE(data, '$.Registro_CAR_Propriedade') AS Registro_CAR_Propriedade,
JSON_VALUE(data, '$.Cidade_Propriedade') AS Cidade_Propriedade,
JSON_VALUE(data, '$.UF_Propriedade') AS UF_Propriedade,
JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao_Propriedade,
JSON_VALUE(data, '$.Tamanho_Propriedade') AS Tamanho_Propriedade,
JSON_VALUE(data, '$.Area_Agricultavel_Propriedade') AS Area_Agricultavel_Propriedade,
JSON_VALUE(data, '$.Area_Cultivada_Soja_Propriedade') AS Area_Cultivada_Soja_Propriedade,
JSON_VALUE(data, '$.Tipo_Irrigacao_Area_Inscrita') AS Tipo_Irrigacao_Area_Inscrita,
JSON_VALUE(data, '$.Sistema_Plantio_Area_Inscrita') AS Sistema_Plantio_Area_Inscrita
FROM cesb_data.data_1ff7e43b5326d657 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH inscricao_base AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Id_Produtor') AS Id_Produtor,
JSON_VALUE(data, '$.Id_Consultor') AS Id_Consultor,
JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
JSON_VALUE(data, '$.Safra') AS Safra,
JSON_VALUE(data, '$.Total_Area_Cultivada_Soja_Propriedade') AS Total_Area_Cultivada_Soja_Propriedade,
JSON_VALUE(data, '$.Produtividade_Final_sc_ha') AS Produtividade_Final_sc_ha,
JSON_VALUE(data, '$.Categoria') AS Categoria,
JSON_VALUE(data, '$.Nacional') AS Nacional,
JSON_VALUE(data, '$.Regional') AS Regional,
JSON_VALUE(data, '$.Estadual') AS Estadual
FROM cesb_data.data_1ff7e43b5326d657
)
SELECT
Inscricao,
Id_Produtor,
Id_Consultor,
Nome_Propriedade,
Safra,
toFloat64OrNull(Total_Area_Cultivada_Soja_Propriedade) AS Total_Area_Cultivada_Soja_Propriedade,
toFloat64OrNull(Produtividade_Final_sc_ha) AS Produtividade_Final_sc_ha,
Categoria,
toInt32OrNull(Nacional) AS Nacional,
toInt32OrNull(Regional) AS Regional,
toInt32OrNull(Estadual) AS Estadual
FROM inscricao_base
WHERE Inscricao IS NOT NULL FORMAT TabSeparated"Resultado de Exemplo:
78931 1897 2024 0.0
78932 26845 2024 0.0
78933 26846 2024 0.0
✅ Consulta funciona com CTEs
Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH plantacao_base AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Populacao_Plantas_Calculada_ha') AS Populacao_Plantas_Calculada_ha,
JSON_VALUE(data, '$.Media_Vagens_Planta') AS Media_Vagens_Planta,
JSON_VALUE(data, '$.Media_Altura_Plantas') AS Media_Altura_Plantas,
JSON_VALUE(data, '$.Media_Insercao_Primeira_Vagem') AS Media_Insercao_Primeira_Vagem,
JSON_VALUE(data, '$.Produtividade_Final_kg_ha') AS Produtividade_Final_kg_ha,
JSON_VALUE(data, '$.Custo_Total_ha') AS Custo_Total_ha,
JSON_VALUE(data, '$.Custo_Total_sc') AS Custo_Total_sc
FROM cesb_data.data_1a50f4ac2d4169fe
)
SELECT
Inscricao,
toFloat64OrNull(Populacao_Plantas_Calculada_ha) AS Populacao_Plantas_Calculada_ha,
toFloat64OrNull(Media_Vagens_Planta) AS Media_Vagens_Planta,
toFloat64OrNull(Media_Altura_Plantas) AS Media_Altura_Plantas,
toFloat64OrNull(Produtividade_Final_kg_ha) AS Produtividade_Final_kg_ha,
toFloat64OrNull(Custo_Total_ha) AS Custo_Total_ha,
toFloat64OrNull(Custo_Total_sc) AS Custo_Total_sc
FROM plantacao_base
WHERE Inscricao IS NOT NULL FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH productivity_metrics AS (
SELECT
JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao,
JSON_VALUE(data, '$.UF_Propriedade') AS Estado,
JSON_VALUE(data, '$.Safra') AS Safra,
AVG(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Avg_Produtividade_sc_ha,
MAX(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Max_Produtividade_sc_ha,
MIN(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Min_Produtividade_sc_ha,
COUNT(DISTINCT JSON_VALUE(data, '$.Inscricao')) AS Total_Inscricoes
FROM cesb_data.data_1a50f4ac2d4169fe
WHERE JSON_VALUE(data, '$.Produtividade_Final_sc_ha') != '0'
GROUP BY Regiao, Estado, Safra
)
SELECT * FROM productivity_metrics
ORDER BY Safra DESC, Avg_Produtividade_sc_ha DESC
LIMIT 10 FORMAT TabSeparated"Resultado de Exemplo:
SUL SC 2024 105.81 68
SUL PR 2024 100.43 133
NORDESTE BA 2024 99.22 59
SUL RS 2024 95.81 83
SUDESTE SP 2024 95.52 68
✅ Agregação funcionando corretamente
Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH cost_breakdown AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Safra') AS Safra,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Mao_de_Obra')) AS Custo_Mao_de_Obra,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Mecanizacao')) AS Custo_Mecanizacao,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Adubacao_Corretivos')) AS Custo_Adubacao_Corretivos,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Defensivos')) AS Custo_Defensivos,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha')) AS Custo_Total_ha
FROM cesb_data.data_1a50f4ac2d4169fe
),
aggregated_costs AS (
SELECT
Safra,
AVG(Custo_Mao_de_Obra) AS Avg_Custo_Mao_de_Obra,
AVG(Custo_Mecanizacao) AS Avg_Custo_Mecanizacao,
AVG(Custo_Adubacao_Corretivos) AS Avg_Custo_Adubacao_Corretivos,
AVG(Custo_Defensivos) AS Avg_Custo_Defensivos,
AVG(Custo_Total_ha) AS Avg_Custo_Total_ha,
COUNT(*) AS Total_Registros
FROM cost_breakdown
WHERE Custo_Total_ha > 0
GROUP BY Safra
)
SELECT * FROM aggregated_costs
ORDER BY Safra DESC FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH file_processing_stats AS (
SELECT
DATE(upload_time) AS Upload_Date,
processing_status,
COUNT(*) AS File_Count,
SUM(rows_processed) AS Total_Rows_Processed,
AVG(rows_processed) AS Avg_Rows_Per_File
FROM cesb_data.file_tracking
GROUP BY Upload_Date, processing_status
),
daily_summary AS (
SELECT
Upload_Date,
SUM(CASE WHEN processing_status = 'completed' THEN File_Count ELSE 0 END) AS Completed_Files,
SUM(CASE WHEN processing_status = 'failed' THEN File_Count ELSE 0 END) AS Failed_Files,
SUM(Total_Rows_Processed) AS Daily_Rows_Processed
FROM file_processing_stats
GROUP BY Upload_Date
)
SELECT * FROM daily_summary
ORDER BY Upload_Date DESC FORMAT TabSeparated"Resultado de Exemplo:
2025-09-26 3 0 118456
2025-09-25 4 0 324777
2025-09-24 8 0 114646
✅ Métricas de rastreamento de arquivos funcionando
Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH
dim_inscricao AS (
SELECT DISTINCT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Safra') AS Safra,
JSON_VALUE(data, '$.Categoria') AS Categoria,
JSON_VALUE(data, '$.Titulo') AS Titulo,
JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao
FROM cesb_data.data_1ff7e43b5326d657
),
dim_location AS (
SELECT DISTINCT
JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
JSON_VALUE(data, '$.Cidade_Propriedade') AS Cidade_Propriedade,
JSON_VALUE(data, '$.UF_Propriedade') AS UF_Propriedade,
JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao_Propriedade
FROM cesb_data.data_1ff7e43b5326d657
),
fact_production AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_sc_ha,
toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_kg_ha')) AS Produtividade_kg_ha,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha')) AS Custo_Total_ha,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_sc')) AS Custo_Total_sc
FROM cesb_data.data_1a50f4ac2d4169fe
)
SELECT
di.Inscricao,
di.Safra,
di.Categoria,
di.Titulo,
dl.Cidade_Propriedade,
dl.UF_Propriedade,
dl.Regiao_Propriedade,
fp.Produtividade_sc_ha,
fp.Produtividade_kg_ha,
fp.Custo_Total_ha,
fp.Custo_Total_sc,
CASE
WHEN fp.Produtividade_sc_ha > 0
THEN fp.Custo_Total_ha / fp.Produtividade_sc_ha
ELSE NULL
END AS Custo_por_Saca
FROM dim_inscricao di
LEFT JOIN fact_production fp ON di.Inscricao = fp.Inscricao
LEFT JOIN dim_location dl ON fp.Nome_Propriedade = dl.Nome_Propriedade
WHERE di.Safra IS NOT NULL
ORDER BY di.Safra DESC, fp.Produtividade_sc_ha DESC
LIMIT 10 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH yearly_performance AS (
SELECT
JSON_VALUE(data, '$.Safra') AS Safra,
JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao,
JSON_VALUE(data, '$.Categoria') AS Categoria,
COUNT(DISTINCT JSON_VALUE(data, '$.Inscricao')) AS Total_Inscricoes,
AVG(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Avg_Produtividade,
AVG(toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha'))) AS Avg_Custo_ha
FROM cesb_data.data_1a50f4ac2d4169fe
WHERE JSON_VALUE(data, '$.Produtividade_Final_sc_ha') != '0'
GROUP BY Safra, Regiao, Categoria
),
yoy_comparison AS (
SELECT
*,
LAG(Avg_Produtividade) OVER (PARTITION BY Regiao, Categoria ORDER BY Safra) AS Prev_Year_Prod,
LAG(Avg_Custo_ha) OVER (PARTITION BY Regiao, Categoria ORDER BY Safra) AS Prev_Year_Cost
FROM yearly_performance
)
SELECT
Safra,
Regiao,
Categoria,
Total_Inscricoes,
round(Avg_Produtividade, 2) AS Avg_Produtividade,
round(Avg_Custo_ha, 2) AS Avg_Custo_ha,
round(Prev_Year_Prod, 2) AS Prev_Year_Prod,
CASE
WHEN Prev_Year_Prod > 0
THEN round(((Avg_Produtividade - Prev_Year_Prod) / Prev_Year_Prod) * 100, 2)
ELSE NULL
END AS YoY_Productivity_Change_Pct
FROM yoy_comparison
WHERE Safra >= '2023'
ORDER BY Safra DESC, Regiao
LIMIT 20 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH densidade_data AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Densidade') AS Densidade_Categoria,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_0_a_10')) AS Densidade_0_a_10,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_10_a_20')) AS Densidade_10_a_20,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_20_a_30')) AS Densidade_20_a_30,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_30_a_40')) AS Densidade_30_a_40,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_40_a_50')) AS Densidade_40_a_50,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_50_a_60')) AS Densidade_50_a_60,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_60_a_70')) AS Densidade_60_a_70,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_70_a_80')) AS Densidade_70_a_80,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_80_a_90')) AS Densidade_80_a_90,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_90_a_100')) AS Densidade_90_a_100
FROM cesb_data.data_3910f69bac299cf3
)
SELECT * FROM densidade_data
WHERE Inscricao IS NOT NULL
LIMIT 10 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "SELECT DISTINCT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual,
toInt32OrNull(JSON_VALUE(data, '$.Municipal')) AS Ranking_Municipal,
JSON_VALUE(data, '$.Titulo') AS Titulo,
JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao
FROM cesb_data.data_3910f69bac299cf3
WHERE JSON_VALUE(data, '$.Classificado') = 'SIM'
ORDER BY Ranking_Nacional, Ranking_Regional
LIMIT 20 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH auditoria_colheita AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Safra') AS Safra,
JSON_VALUE(data, '$.Categoria') AS Categoria,
JSON_VALUE(data, '$.Situacao_Inscricao') AS Situacao_Inscricao,
JSON_VALUE(data, '$.Auditoria_Realizada') AS Auditoria_Realizada,
JSON_VALUE(data, '$.Classificado') AS Classificado,
JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao,
toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_Final_sc_ha,
JSON_VALUE(data, '$.Densidade') AS Densidade_Categoria,
toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual
FROM cesb_data.data_3910f69bac299cf3
)
SELECT
Inscricao,
Safra,
Categoria,
Situacao_Inscricao,
Auditoria_Realizada,
Classificado,
Status_Classificacao,
Produtividade_Final_sc_ha,
Densidade_Categoria,
Ranking_Nacional,
Ranking_Regional,
Ranking_Estadual
FROM auditoria_colheita
WHERE Inscricao IS NOT NULL
ORDER BY Safra DESC, Produtividade_Final_sc_ha DESC
LIMIT 20 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH density_analysis AS (
SELECT
JSON_VALUE(data, '$.Safra') AS Safra,
JSON_VALUE(data, '$.Categoria') AS Categoria,
JSON_VALUE(data, '$.UF_Propriedade') AS UF,
AVG(toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha'))) AS Avg_Produtividade,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_0_a_10'))) AS Avg_Densidade_0_10,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_10_a_20'))) AS Avg_Densidade_10_20,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_20_a_30'))) AS Avg_Densidade_20_30,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_30_a_40'))) AS Avg_Densidade_30_40,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_40_a_50'))) AS Avg_Densidade_40_50,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_50_a_60'))) AS Avg_Densidade_50_60,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_60_a_70'))) AS Avg_Densidade_60_70,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_70_a_80'))) AS Avg_Densidade_70_80,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_80_a_90'))) AS Avg_Densidade_80_90,
AVG(toInt32OrNull(JSON_VALUE(data, '$.Densidade_90_a_100'))) AS Avg_Densidade_90_100,
COUNT(*) AS Total_Inscricoes
FROM cesb_data.data_3910f69bac299cf3
WHERE JSON_VALUE(data, '$.Auditoria_Realizada') = 'SIM'
GROUP BY Safra, Categoria, UF
)
SELECT
Safra,
Categoria,
UF,
round(Avg_Produtividade, 2) AS Avg_Produtividade,
round(Avg_Densidade_0_10, 2) AS Densidade_0_10,
round(Avg_Densidade_10_20, 2) AS Densidade_10_20,
round(Avg_Densidade_20_30, 2) AS Densidade_20_30,
round(Avg_Densidade_30_40, 2) AS Densidade_30_40,
round(Avg_Densidade_40_50, 2) AS Densidade_40_50,
round(Avg_Densidade_50_60, 2) AS Densidade_50_60,
round(Avg_Densidade_60_70, 2) AS Densidade_60_70,
round(Avg_Densidade_70_80, 2) AS Densidade_70_80,
round(Avg_Densidade_80_90, 2) AS Densidade_80_90,
round(Avg_Densidade_90_100, 2) AS Densidade_90_100,
Total_Inscricoes
FROM density_analysis
ORDER BY Safra DESC, Avg_Produtividade DESC
LIMIT 20 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH winners AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Nome_Produtor') AS Nome_Produtor,
JSON_VALUE(data, '$.Nome_Consultor') AS Nome_Consultor,
JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
JSON_VALUE(data, '$.Safra') AS Safra,
JSON_VALUE(data, '$.Categoria') AS Categoria,
JSON_VALUE(data, '$.Titulo') AS Titulo,
toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual,
toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_Final_sc_ha
FROM cesb_data.data_3910f69bac299cf3
WHERE JSON_VALUE(data, '$.Titulo') IS NOT NULL
AND LENGTH(JSON_VALUE(data, '$.Titulo')) > 0
)
SELECT
Inscricao,
Nome_Produtor,
Nome_Consultor,
Nome_Propriedade,
Safra,
Categoria,
Titulo,
Ranking_Nacional,
Ranking_Regional,
Ranking_Estadual,
Produtividade_Final_sc_ha
FROM winners
ORDER BY Safra DESC,
CASE
WHEN Titulo LIKE '%CAMPEAO NACIONAL%' THEN 1
WHEN Titulo LIKE '%CAMPEAO REGIONAL%' THEN 2
WHEN Titulo LIKE '%CAMPEAO ESTADUAL%' THEN 3
ELSE 4
END,
Produtividade_Final_sc_ha DESC
LIMIT 30 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "SELECT DISTINCT
JSON_VALUE(data, '$.Id_Autor') AS Id_Autor,
JSON_VALUE(data, '$.Nome_Autor') AS Nome_Autor,
JSON_VALUE(data, '$.CPF_CNPJ_Autor') AS CPF_CNPJ_Autor,
JSON_VALUE(data, '$.Data_Nascimento_Autor') AS Data_Nascimento_Autor,
JSON_VALUE(data, '$.Genero_Autor') AS Genero_Autor,
JSON_VALUE(data, '$.Cidade_Autor') AS Cidade_Autor,
JSON_VALUE(data, '$.UF_Autor') AS UF_Autor,
JSON_VALUE(data, '$.Regiao_Autor') AS Regiao_Autor
FROM cesb_data.data_1ff7e43b5326d657
WHERE JSON_VALUE(data, '$.Id_Autor') IS NOT NULL
LIMIT 10 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH soil_data AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Textura_Solo') AS Textura_Solo,
JSON_VALUE(data, '$.Classificacao_Solo') AS Classificacao_Solo,
JSON_VALUE(data, '$.Revolvimento_Solo') AS Revolvimento_Solo,
JSON_VALUE(data, '$.Implemento_Utilizado') AS Implemento_Utilizado,
JSON_VALUE(data, '$.Profundidade_Atingida') AS Profundidade_Atingida,
JSON_VALUE(data, '$.Houve_Nematoide') AS Houve_Nematoide,
JSON_VALUE(data, '$.Tipo_de_Nematoide') AS Tipo_de_Nematoide
FROM cesb_data.data_75824b7d2b020578
UNION ALL
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
NULL AS Textura_Solo,
NULL AS Classificacao_Solo,
NULL AS Revolvimento_Solo,
NULL AS Implemento_Utilizado,
NULL AS Profundidade_Atingida,
JSON_VALUE(data, '$.Calcario') AS Houve_Nematoide,
JSON_VALUE(data, '$.Dose_Calc_ton_ha') AS Tipo_de_Nematoide
FROM cesb_data.data_f42e897a8f38c330
)
SELECT * FROM soil_data
WHERE Inscricao IS NOT NULL
LIMIT 10 FORMAT TabSeparated"Comando cURL:
curl -X POST "http://localhost:8123/" \
-H "Content-Type: text/plain" \
--data-binary "WITH
-- Dimensões de todas as tabelas
dim_inscricao AS (
SELECT DISTINCT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Safra') AS Safra,
JSON_VALUE(data, '$.Categoria') AS Categoria,
JSON_VALUE(data, '$.Titulo') AS Titulo,
JSON_VALUE(data, '$.Status_Classificacao') AS Status_Classificacao
FROM cesb_data.data_1ff7e43b5326d657
),
dim_location AS (
SELECT DISTINCT
JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
JSON_VALUE(data, '$.Cidade_Propriedade') AS Cidade_Propriedade,
JSON_VALUE(data, '$.UF_Propriedade') AS UF_Propriedade,
JSON_VALUE(data, '$.Regiao_Propriedade') AS Regiao_Propriedade
FROM cesb_data.data_1ff7e43b5326d657
),
fact_production AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Nome_Propriedade') AS Nome_Propriedade,
toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_sc_ha')) AS Produtividade_sc_ha,
toFloat64OrNull(JSON_VALUE(data, '$.Produtividade_Final_kg_ha')) AS Produtividade_kg_ha,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_ha')) AS Custo_Total_ha,
toFloat64OrNull(JSON_VALUE(data, '$.Custo_Total_sc')) AS Custo_Total_sc
FROM cesb_data.data_1a50f4ac2d4169fe
),
fact_audit_density AS (
SELECT
JSON_VALUE(data, '$.Inscricao') AS Inscricao,
JSON_VALUE(data, '$.Auditoria_Realizada') AS Auditoria_Realizada,
JSON_VALUE(data, '$.Classificado') AS Classificado,
toInt32OrNull(JSON_VALUE(data, '$.Nacional')) AS Ranking_Nacional,
toInt32OrNull(JSON_VALUE(data, '$.Regional')) AS Ranking_Regional,
toInt32OrNull(JSON_VALUE(data, '$.Estadual')) AS Ranking_Estadual,
JSON_VALUE(data, '$.Densidade') AS Densidade_Categoria,
toInt32OrNull(JSON_VALUE(data, '$.Densidade_50_a_60')) +
toInt32OrNull(JSON_VALUE(data, '$.Densidade_60_a_70')) +
toInt32OrNull(JSON_VALUE(data, '$.Densidade_70_a_80')) +
toInt32OrNull(JSON_VALUE(data, '$.Densidade_80_a_90')) +
toInt32OrNull(JSON_VALUE(data, '$.Densidade_90_a_100')) AS Densidade_Alta_Total
FROM cesb_data.data_3910f69bac299cf3
)
SELECT
di.Inscricao,
di.Safra,
di.Categoria,
di.Titulo,
dl.Cidade_Propriedade,
dl.UF_Propriedade,
dl.Regiao_Propriedade,
fp.Produtividade_sc_ha,
fp.Produtividade_kg_ha,
fp.Custo_Total_ha,
fp.Custo_Total_sc,
fad.Auditoria_Realizada,
fad.Classificado,
fad.Ranking_Nacional,
fad.Ranking_Regional,
fad.Ranking_Estadual,
fad.Densidade_Categoria,
fad.Densidade_Alta_Total,
CASE
WHEN fp.Produtividade_sc_ha > 0
THEN fp.Custo_Total_ha / fp.Produtividade_sc_ha
ELSE NULL
END AS Custo_por_Saca
FROM dim_inscricao di
LEFT JOIN fact_production fp ON di.Inscricao = fp.Inscricao
LEFT JOIN dim_location dl ON fp.Nome_Propriedade = dl.Nome_Propriedade
LEFT JOIN fact_audit_density fad ON di.Inscricao = fad.Inscricao
WHERE di.Safra IS NOT NULL
ORDER BY di.Safra DESC, fp.Produtividade_sc_ha DESC
LIMIT 50 FORMAT TabSeparated"| Tipo de Consulta | Status | Descrição |
|---|---|---|
| DIM_PRODUTOR | ✅ Sucesso | Dados de dimensão do produtor extraídos corretamente |
| DIM_CONSULTOR | ✅ Sucesso | Dimensão do consultor funcionando |
| DIM_PROPRIEDADE | ✅ Sucesso | Dimensão da propriedade funcionando |
| DIM_DENSIDADE | ✅ Sucesso | Dimensão de densidade da Tabela 10 |
| DIM_RANKING_COMPETICAO | ✅ Sucesso | Ranking de competição da Tabela 10 |
| FATO_INSCRICAO | ✅ Sucesso | Fatos de inscrição com CTEs funcionando |
| FATO_PLANTACAO | ✅ Sucesso | Fatos de plantação recuperando dados |
| FATO_AUDITORIA_COLHEITA | ✅ Sucesso | Fatos de auditoria da colheita da Tabela 10 |
| Agregação de Produtividade | ✅ Sucesso | Métricas de produtividade regional calculando corretamente |
| Análise de Custos | ✅ Sucesso | Discriminação de custos agregando adequadamente |
| Análise de Distribuição de Densidade | ✅ Sucesso | Análise de zona de densidade da Tabela 10 |
| Análise de Vencedores da Competição | ✅ Sucesso | Análise de ranking do campeonato |
| Monitoramento de Arquivos | ✅ Sucesso | Estatísticas de rastreamento de arquivos funcionando |
| Visão Aprimorada do Cubo Mestre | ✅ Sucesso | Visão integrada combinando todas as 10 tabelas |
| Desempenho Ano a Ano | ✅ Sucesso | Comparações ano a ano com funções de janela |
| Arquivo | Nome da Tabela | Tabela ClickHouse | Descrição |
|---|---|---|---|
| 01-Inscricao_Cadastro | TABELA 01 | data_1ff7e43b5326d657 | Dados de inscrição e cadastro |
| 02-Historico_Gleba | TABELA 02 | data_75824b7d2b020578 | Histórico e gestão da gleba |
| 03-Correcao_Solo_Gessagem | TABELA 03 | data_f42e897a8f38c330 | Correção do solo e gessagem |
| 04-Implantacao_Agricola | TABELA 04 | data_e19f5744bfe42156 | Implantação agrícola |
| 05-Tratamento_Semente | TABELA 05 | data_f3757437febc5061 | Tratamento de sementes |
| 06-Adubacao | TABELA 06 | data_1cf2ddc898ffcb9f | Adubação |
| 07-Agroquimicos | TABELA 07 | data_e24603e96594e2dc | Agroquímicos |
| 08-Tecnologia | TABELA 08 | data_9932a19fc714fba7 | Tecnologia e maquinário |
| 09a-Inscricao_Produtor_Colheita | TABELA 09 | data_1a50f4ac2d4169fe | Dados de colheita do produtor |
| 09b-Inscricao_Auditoria_Colheita | TABELA 10 | data_3910f69bac299cf3 | Auditoria da colheita e densidade |
- String de Conexão: Use o endpoint HTTP
http://localhost:8123/com método POST - Formato: Use
FORMAT JSONpara Power BI ouFORMAT TabSeparatedpara testes - CTEs: Todas as consultas complexas usam CTEs para melhor desempenho e legibilidade
- Tipos de Dados: Conversões de tipo adequadas com
toFloat64OrNull()etoInt32OrNull() - Extração JSON: Todos os dados extraídos usando a função
JSON_VALUE()do armazenamento semi-estruturado - Integração de 10 Tabelas: Todas as consultas suportam a estrutura completa de 10 tabelas conforme especificação PDF
- Criar views materializadas para agregações acessadas frequentemente
- Considerar particionamento por
Safra(ano) para melhor desempenho de consultas - Adicionar índices em colunas frequentemente filtradas como
Inscricao,Id_Produtor - Usar otimização de projeção para tabelas de dimensão
- Implementar atualização incremental no Power BI para grandes conjuntos de dados
- Criar views materializadas agendadas para agregações pesadas
- Implementar verificações de qualidade de dados e monitoramento
- Configurar pipeline de carregamento de dados incremental
- Configurar gateway do Power BI para conectividade em tempo real
- Criar medidas DAX no Power BI para cálculos complexos