Upload dos dados utilizando tabelas temporárias para reduzir o número de querys ao banco
This commit is contained in:
parent
654d363d12
commit
325bc76757
@ -19,10 +19,10 @@ namespace Infrastructure
|
|||||||
using var connection = new OleDbConnection(_connectionString);
|
using var connection = new OleDbConnection(_connectionString);
|
||||||
await connection.OpenAsync(ct);
|
await connection.OpenAsync(ct);
|
||||||
|
|
||||||
string sql = $"SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 AND Unidade_gerenciada ORDER BY cod_smart_unidade";
|
//string sql = $"SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 AND Unidade_gerenciada ORDER BY cod_smart_unidade";
|
||||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and (Cliente = 'RMC ALIMENTOS' OR Cliente = 'FERREIRA SUPERMERCADO' OR Cliente = 'VANGUARDA ALIMENTOS') AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and (Cliente = 'RMC ALIMENTOS' OR Cliente = 'FERREIRA SUPERMERCADO' OR Cliente = 'VANGUARDA ALIMENTOS') AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'ABEVÊ' and Unidade = 'ABV LOJA 29 - COXIM' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'ABEVÊ' and Unidade = 'ABV LOJA 29 - COXIM' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'calvi granitos' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'SIDERQUÍMICA' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Codigo_SCDE = 'DFLBCEENTR101'";
|
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Codigo_SCDE = 'DFLBCEENTR101'";
|
||||||
|
|
||||||
using var command = new OleDbCommand(sql, connection);
|
using var command = new OleDbCommand(sql, connection);
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Domain;
|
using System.Globalization;
|
||||||
|
using Domain;
|
||||||
using Npgsql;
|
using Npgsql;
|
||||||
using NpgsqlTypes;
|
using NpgsqlTypes;
|
||||||
|
|
||||||
@ -74,31 +75,65 @@ namespace Infrastructure
|
|||||||
await using var connection = await _dataSource.OpenConnectionAsync(ct);
|
await using var connection = await _dataSource.OpenConnectionAsync(ct);
|
||||||
using var batch = new NpgsqlBatch(connection);
|
using var batch = new NpgsqlBatch(connection);
|
||||||
|
|
||||||
foreach (var m in medicoes)
|
// Gerar os parâmetros dinamicamente, mantendo a abordagem parametrizada
|
||||||
|
var valores = medicoes
|
||||||
|
.Select((m, index) => new
|
||||||
{
|
{
|
||||||
var cmd = new NpgsqlBatchCommand(@"
|
Index = index,
|
||||||
|
Ponto = m.Ponto,
|
||||||
|
DiaNum = m.DiaNum,
|
||||||
|
Minuto = m.Minuto,
|
||||||
|
Origem = m.Origem,
|
||||||
|
AtivaConsumo = m.AtivaConsumo,
|
||||||
|
AtivaGeracao = m.AtivaGeracao,
|
||||||
|
ReativaConsumo = m.ReativaConsumo,
|
||||||
|
ReativaGeracao = m.ReativaGeracao
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var query = @"
|
||||||
UPDATE med_5min
|
UPDATE med_5min
|
||||||
SET origem = @origem,
|
SET origem = nv.origem,
|
||||||
ativa_consumo = @ativa_consumo,
|
ativa_consumo = nv.ativa_consumo,
|
||||||
ativa_geracao = @ativa_geracao,
|
ativa_geracao = nv.ativa_geracao,
|
||||||
reativa_consumo = @reativa_consumo,
|
reativa_consumo = nv.reativa_consumo,
|
||||||
reativa_geracao = @reativa_geracao
|
reativa_geracao = nv.reativa_geracao
|
||||||
WHERE ponto = @ponto
|
FROM (VALUES";
|
||||||
AND dia_num = @dia_num
|
|
||||||
AND minuto = @minuto;");
|
|
||||||
|
|
||||||
cmd.Parameters.AddWithValue("origem", m.Origem);
|
// Adicionar os valores para o `VALUES`
|
||||||
cmd.Parameters.AddWithValue("ativa_consumo", NpgsqlDbType.Numeric, m.AtivaConsumo ?? (object)DBNull.Value);
|
for (int i = 0; i < valores.Count; i++)
|
||||||
cmd.Parameters.AddWithValue("ativa_geracao", NpgsqlDbType.Numeric, m.AtivaGeracao ?? (object)DBNull.Value);
|
{
|
||||||
cmd.Parameters.AddWithValue("reativa_consumo", NpgsqlDbType.Numeric, m.ReativaConsumo ?? (object)DBNull.Value);
|
query += $" (@ponto_{i}, @dia_num_{i}, @minuto_{i}, @origem_{i}, " +
|
||||||
cmd.Parameters.AddWithValue("reativa_geracao", NpgsqlDbType.Numeric, m.ReativaGeracao ?? (object)DBNull.Value);
|
$"@ativa_consumo_{i}, @ativa_geracao_{i}, @reativa_consumo_{i}, @reativa_geracao_{i})";
|
||||||
cmd.Parameters.AddWithValue("ponto", m.Ponto);
|
if (i < valores.Count - 1)
|
||||||
cmd.Parameters.AddWithValue("dia_num", m.DiaNum);
|
{
|
||||||
cmd.Parameters.AddWithValue("minuto", m.Minuto);
|
query += ", ";
|
||||||
|
}
|
||||||
batch.BatchCommands.Add(cmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query += @") AS nv (ponto, dia_num, minuto, origem, ativa_consumo, ativa_geracao, reativa_consumo, reativa_geracao)
|
||||||
|
WHERE med_5min.ponto = nv.ponto
|
||||||
|
AND med_5min.dia_num = nv.dia_num
|
||||||
|
AND med_5min.minuto = nv.minuto;";
|
||||||
|
|
||||||
|
// Agora, vamos adicionar os parâmetros à query
|
||||||
|
var cmd = new NpgsqlBatchCommand(query);
|
||||||
|
|
||||||
|
foreach (var valor in valores)
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue($"ponto_{valor.Index}", valor.Ponto);
|
||||||
|
cmd.Parameters.AddWithValue($"dia_num_{valor.Index}", valor.DiaNum);
|
||||||
|
cmd.Parameters.AddWithValue($"minuto_{valor.Index}", valor.Minuto);
|
||||||
|
cmd.Parameters.AddWithValue($"origem_{valor.Index}", valor.Origem);
|
||||||
|
cmd.Parameters.AddWithValue($"ativa_consumo_{valor.Index}", valor.AtivaConsumo ?? (object)DBNull.Value);
|
||||||
|
cmd.Parameters.AddWithValue($"ativa_geracao_{valor.Index}", valor.AtivaGeracao ?? (object)DBNull.Value);
|
||||||
|
cmd.Parameters.AddWithValue($"reativa_consumo_{valor.Index}", valor.ReativaConsumo ?? (object)DBNull.Value);
|
||||||
|
cmd.Parameters.AddWithValue($"reativa_geracao_{valor.Index}", valor.ReativaGeracao ?? (object)DBNull.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
batch.BatchCommands.Add(cmd);
|
||||||
|
|
||||||
|
// Executar a query
|
||||||
await batch.ExecuteNonQueryAsync(ct);
|
await batch.ExecuteNonQueryAsync(ct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,8 +12,8 @@ class Program
|
|||||||
string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv";
|
string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv";
|
||||||
//DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 1);
|
//DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 1);
|
||||||
//DateTime dataFim = new DateTime(inicio.Year, inicio.Month, inicio.Day);
|
//DateTime dataFim = new DateTime(inicio.Year, inicio.Month, inicio.Day);
|
||||||
DateTime dataIni = new DateTime(inicio.Year, 01, 01);
|
DateTime dataIni = new DateTime(inicio.Year, 10, 01);
|
||||||
DateTime dataFim = new DateTime(inicio.Year, 02, 01);
|
DateTime dataFim = new DateTime(inicio.Year, 10, 16);
|
||||||
|
|
||||||
// Configuração de dependências (pode usar um container DI depois)
|
// Configuração de dependências (pode usar um container DI depois)
|
||||||
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
|
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user