Pular para o conteúdo principal

SSIS – Criação de Log com Linhas que não serão carregadas na tabela Alvo

 

Cenário:

A necessidade de automatizar a carga de um grande volume de dados pode colocar a equipe de desenvolvimento na difícil tarefa de tentar encontrar erros oriundos da fonte de informação. Entretanto, identificar os registros problemáticos poderá ser uma ação extremamente onerosa. Uma das formas mais produtivas de se efetuar essa tarefa no Integration Services(SISS) é garantir a execução total da rotina de carga .Configurando a mesma para separar os registros defeituosos dos registros corretos.

Esse tutorial apresentará uma forma simples de permitir a análise dos registros que não poderão ser levados para a tabela alvo desejada.

Ambiente:

O ambiente de desenvolvimento dessa solução é composto pelo sistema operacional Windows 10,  banco de dados Sql Server e Integration Services (SISS – ferramenta para extração e carga dos dados).

Problema:

A empresa Xpto opera com dois bancos de dados: ZAX e PXO. O PXO precisará carregar os dados da tabela tFuncionario presente no banco ZAX. A tabela tFuncionario possui os seguintes dados listados abaixo:

 

Id

Nome

Setor

Idade

1

João

Vendas

50

2

Marta

TI

35

3

Maria

Financeiro

X


OBS: Para conseguir criar o contexto do problema na carga, será considerado que a linha correspondente ao Id 3 possui uma inconsistência de tipo para o atributo idade. Pois, o atributo idade foi definido como varchar e por algum motivo foi cadastrado um valor de idade incompatível com o tipo inteiro.

 

Segue o script para montar o contexto da tabela fonte de dados:

Scripts:

CREATE TABLE [dbo].[tFuncionario](

       [cod] [INT] NULL,

       [nome] [varchar](250) NULL,

       [setor] [varchar](50) NULL,

       [idade] [varchar](2)

) ON [PRIMARY]

GO


INSERT INTO [dbo].[tFuncionario]  (cod , nome ,setor ,idade) VALUES (1,'João','Vendas',50)

INSERT INTO [dbo].[tFuncionario]  (cod , nome ,setor ,idade) VALUES (2,'Marta','TI',35)

INSERT INTO [dbo].[tFuncionario]  (cod , nome ,setor ,idade) VALUES (3,'Maria','Financeiro','X')


A tabela do banco PXO que receberá os dados de tFuncionario   se chama tFuncStageZAX. Essa tabela possui o seguinte script de criação:

 

CREATE TABLE [dbo].[tFuncStageZAX](

       [cod] [INT] NULL,

       [nome] [varchar](250) NULL,

       [setor] [varchar](50) NULL,

       [idade] [INT]

) ON [PRIMARY]

GO

 

Diante dessa estrutura de tabela, a linha de Id 3 da tabela tFuncionario irá gerar um erro na carga pois o valor X não conseguirá ser convertido em um valor inteiro 

Solução:

Passo 1

Na tela Fluxo de Controle arraste o componente de Fluxo de Carga.



Entre no componente clicando duas vezes sobre o mesmo para abrir a tela de Fluxo de Dados. arraste um componente para a origem de dados referenciando a tabela tFuncionario e um componente de destino de dados referenciando a tabela tFuncStageZAX.




Passo 2 (Identificação do Erro)

Tente executar a carga para que o erro abaixo seja exibido pelo integration Service. 

Consulte a tabela destino tFuncStageZAX e perceba que nenhum dado foi carregado lá.



Passo 3 (Tratamento do Erro)

Para possibilitar a carga dos registros corretos e facilitar a identificação das linhas responsáveis pelo erro exibido no Passo 2 a   seguinte configuração de carga poderá ser realizada:



Para desenvolver essa configuração foi incluído o componente de Destino de Dados nomeado de tLogCargaFunc. Este componente tem como entrada de dados uma linha vermelha que representa o fluxo das linhas responsáveis por gerar exceções ou erros na inserção de dados na tabela tFuncStageZAX.

A configuração do componente tLogCargaFunc foi realizada seguindo as seguintes etapas:

Abrindo a tela de edição do componente tLogCargaFunc crie a tabela para agilizar a criação da estrutura de log para armazenar as linhas incorretas.




 



Entre na aba de Mapeamentos para estabelecer as correspondências entre as colunas do log o fluxo dos dados


Após finalizar a configuração do componente de Log a carga poderá ser executada novamente. Após a finalização da mesma o erro não será mais emitido pelo Integration Service e a tabela tLogCargaFunc armazenará a linha de Id igual 3 enquanto a tabela tFuncStageZAX armazenará os outros dois registros.

Conclusão

O Integration Service oferece o mecanismo para captura de erros na inserção dos registros de uma tabela. Esse mecanimos possibilita a continuação da carga e registro das linhas incorretas. Facilitando a depuração da carga e continuação da mesma através da inserção dos registros válidos na tabela alvo. 





Comentários

Postagens mais visitadas deste blog

Validando Documentos com Fluent Validation, DocsBRValidator e .net Core 6.0

  Introdução A necessidade de utilização das bases de dados para construção de estratégias de negócios através  de técnicas de Ciência de Dados torna necessário que as aplicações sejam cada vez mais cuidadosas para a validação dos campos que serão salvos nas bases dos sistemas. Esses cuidados tem o objetivo de melhorar a qualiade das informações que serão fornecidas para sistemas de Inteligência artificial, mineração de dados, etc . Neste artigo será apresentada a construção de uma solução console que utiliza o Fluent Validation, DocsBRValidator  e o .net Core 6 para validar o número do CPF fornecido pelo usuário.   FluentValidation FluentValidation é uma bliblioteca .Net criada para construção de regras de validação. Com essa biblioteca  podem ser definidos a obrigatoriedade de campos , os tamanhos, os tipos e a formatação.   DocsBRValidator DocsBRValidator é uma biblioteca que possui a regra de validação para os principais documentos brasileiros como CPF, CNPJ,  RG, CNH, Titulo de El

Criando uma calculadora Android com o Kotlin

Resumo Aprender a programar para Android exige a absorção de conceitos básicos que são mais naturalmente entendidos quando aplicados em algum projeto de desenvolvimento. Objetivando introduzir o contato com o Kotlin para Android, foi criado neste artigo um aplicativo simples de calculadora que possibilita a apresentação do tratamento de eventos de botões, uso de expressões regulares e utilização de um método estático. Introdução O desenvolvimento de aplicativos envolve o entendimento de conceitos que devem ser naturalizados pelos desenvolvedores. Uma das formas mais comuns de se naturalizar os diversos recurso de uma plataforma é desenvolver projetos que demonstrem o funcionamento prático dos conceitos implementados. O aplicativo   Calculadora foi desenvolvido por possibilitar o contato inicial do desenvolvedor com os conceitos de tratamento de eventos, métodos estáticos e expressões regulares. O código desenvolvido buscou implementar estes conceitos de maneira introdutória. Não fo

Logic Programming With Python - 03

Control Flow We often need to run specific code for certain conditions or we must run a code snippet many times. Toward we have this behavors we need of structures of control flow. Basically these structures are divided into conditional and repeating structures.  Conditional structures allow select code snippets for specific conditions while Loop structures allow the execution of code snippets many times. Conditional structures in Python The logical conditionals usein Python are: Equals:  a == b Not Equals:  a != b Less than:  a < b Less than or equal to:  a <= b Greater than:  a > b Greater than or equal to:  a >= b These conditions are fundamental to statement logical and loops Simple if-statement. In this example were declared two variables: a and b. In the if-statement  was defined the condition b > a. As b is equal the five and a is equal to three the message "b greater than a" will show to the user. Code Block In Python, The code block is defined through