Buscar K
Aparência
Aparência
O processador Map é um nó de scripting avançado que permite escrever código C# puro para manipular, transformar, filtrar ou gerar dados. Ele oferece controle total sobre o fluxo de dados, permitindo lógicas que não são possíveis com nós padrão.
O Horus compila seu código C# em tempo de execução (usando Roslyn) e o injeta dentro de um método executável no pipeline de dados.
O código que você escreve é o corpo do seguinte método:
public DataList Run(DataList input, ETLLogger logger, DataList input0, ...)
{
// SEU CÓDIGO AQUI
}Para usar este nó efetivamente, você interage com as seguintes classes do motor ETL:
Representa o fluxo de dados (tabela).
IEnumerable<DataRow>. Você pode iterar sobre ele com foreachinput.GetSchema())Representa uma linha de dados.
var valor = linha["NOME_DA_COLUNA"];
linha["OUTRA_COLUNA"] = 123;object). Use a classe Helpers para conversão segura (Helpers.ToDouble(), Helpers.ToDate())Permite escrever mensagens no log de execução, visíveis na tela.
logger.Log("Mensagem"): Escreve uma linha no logItera sobre as linhas recebidas e altera o valor de uma coluna existente. Ideal para correções pontuais.
// Itera sobre cada linha do input
foreach(var linha in input)
{
// Lê coluna "NUMERO", multiplica por 2 e salva na coluna "RESULTADO"
// Nota: A coluna "RESULTADO" deve existir previamente no fluxo
linha["RESULTADO"] = Helpers.ToDouble(linha["NUMERO"]) * 2;
}
// Retorna o mesmo DataList modificado
return input;Cria uma estrutura de dados totalmente nova e gera linhas programaticamente. Ideal para normalização, explosão de linhas ou criação de dados sintéticos.
// 1. Defina o schema (colunas e tipos) da saída
var schema = DataSchema.Create(@"
ID NUMBER
NOME STRING
DATA_CRIACAO DATE
");
// 2. Crie uma função geradora (yield return) para performance (Lazy Loading)
// Isso evita carregar tudo na memória de uma vez
IEnumerable<DataRow> GerarDados()
{
int i = 0;
foreach(var linhaOriginal in input)
{
i++;
// Log a cada 10.000 linhas para acompanhar progresso
if (i % 10000 == 0) logger.Log($"Processado {i:N0} linhas...");
// Cria uma nova linha vazia com o schema definido
var dr = new DataRow(schema);
// Preenche os valores
dr["ID"] = i;
dr["NOME"] = linhaOriginal["NOME_COMPLETO"].ToString().ToUpper();
dr["DATA_CRIACAO"] = DateTime.Now;
// Entrega a linha para o próximo passo do fluxo
yield return dr;
}
}
// 3. Retorna um novo DataList usando o gerador e o schema
return new DataList(GerarDados(), schema);WARNING
Use com Moderação O nó Map é poderoso, mas requer conhecimento de C#.