Explicação do SAP Data Services
Acesso a dados
Desenvolvimento de jobs e fluxos de dados
Solução de problemas de jobs em lote
Uso de funções, scripts e variáveis
Consulta de dados com transformações de plataforma
Dividir e combinar dados com transformações de plataforma
Tratamento de erros e recuperação de falhas
Atualizando dados
Projetando cenários ETL avançados usando as transformações do SAP Data Services Integrator
Otimizando o desempenho

Configuração do tratamento de erros

Objective

After completing this lesson, you will be able to explicar os níveis das estratégias de recuperação de dados

Estratégias de tratamento de erros

A primeira solução para gerenciar situações de erro é evitá-las. Algumas situações de erro podem ser facilmente evitadas pela construção de jobs para que eles levem em conta os problemas que frequentemente os causam a falha.

Mas algumas situações são inevitáveis, como falhas de servidor. Em seguida, você deve projetar seus fluxos de dados para se recuperar da situação de falha.

Evitar erros

Você pode evitar erros em seus fluxos de dados:

  • Utilizar condições para que o fluxo de dados só seja executado quando o contexto estiver correto.
  • Usando um loop para começar de novo até que o contexto esteja correto.

    Não se esqueça de adicionar uma saída caso a situação nunca seja alcançada!

Um exemplo é quando um arquivo externo é necessário para executar um trabalho. Nesta situação, utilize a função wait_for_file ou um loop while e a função file_exists para verificar se o arquivo existe em um local especificado antes de executar o trabalho.

O loop while é um objeto de uso único que é usado em um fluxo de trabalho. O loop while repete uma sequência de etapas desde que uma condição seja verdadeira.

Normalmente, as etapas efetuadas durante o loop while resultam em uma modificação na condição de modo que a condição não seja mais satisfeita e o fluxo de trabalho saia do loop while. Se a condição não for modificada, o loop while não termina.

Por exemplo, você pode querer que um fluxo de trabalho espere até que o sistema grave um determinado arquivo. Use um loop while para verificar a existência do arquivo usando a função file_exists. Enquanto o arquivo não existir, o fluxo de trabalho pode entrar no modo de espera por um determinado período de tempo antes de verificar novamente.

Uma vez que o sistema pode nunca escrever o arquivo, adicione outra verificação ao loop, como um contador, para garantir que o loop while eventualmente exista. Em outras palavras, modifique o loop while para verificar a existência do arquivo e o valor do contador. Enquanto o file não existir e o contador for inferior a um determinado valor, repita o loop while. Em cada iteração do loop, coloque o fluxo de trabalho no modo de espera e, em seguida, incremente o contador.

Níveis de estratégias de recuperação de dados

Alguns erros não podem ser antecipados e causarão a falha do job.

Executar novamente um job falhado pode resultar em duplicação de linhas que foram carregadas com êxito durante a primeira execução da tarefa.

Em seguida, você tem que encontrar uma forma de recuperar seus jobs para que o banco de dados esteja em um estado correto e você possa continuar com o escalonamento.

Aqui estão algumas estratégias de recuperação:
  • Recuperar todo o banco de dados

    Use os serviços RDBMS padrão para restaurar o cache de dados com falhas em todo o banco de dados. Esta opção está fora do escopo deste curso.

  • Utilizar transações:

    Configure seu fluxo de dados para ser incluído em uma transação, de modo que as tabelas permaneçam em um estado consistente.

  • Recuperar de tabelas parcialmente carregadas:

    Evite o carregamento duplicado de linhas.

  • Recuperar valores ou linhas ausentes:

    Identificar valores em falta e gerenciar linhas que não puderam ser inseridas.

  • Gerenciar exceções:

    Certifique-se de que todas as exceções sejam gerenciadas em um fluxo de trabalho.

Dependendo das relações entre fluxos de dados em seu aplicativo, você pode usar uma combinação dessas técnicas para se recuperar de erros.

Configuração de transações

Se o seu fluxo de dados precisar carregar uma grande quantidade de dados ou se carregar tabelas dependentes, por exemplo, ordens do cliente e tabelas de itens da ordem do cliente, você não quer que sejam carregadas linhas se algumas outras não forem.

Para melhorar o desempenho e o uso de recursos, o SAP Data Services, por padrão, carrega tabelas em várias transações. Você pode definir a opção "Linhas por commit" para determinar quantas linhas serão processadas em cada transação.

Mas, se o seu fluxo de dados falhar, algumas linhas podem já ter sido confirmadas na tabela quando o job é interrompido.

Para evitar essa situação, você pode pedir ao Data Services para incluir todo o fluxo de dados em uma única transação.

Dados carregados parcialmente

Vários métodos podem ser utilizados para garantir que não são inseridas linhas duplicadas:

  • Para evitar a inserção de duplicados, utilize uma das seguintes opções:
    • Inclua a transformação Comparação de tabelas no fluxo de dados para inserir somente linhas ausentes quando a tabela tiver mais linhas e menos campos, como tabelas de fatos.
    • Selecione a opção Excluir dados da tabela antes de carregar ou Soltar e recriar tabela na tabela de destino para substituir dados durante cada execução. Esta técnica pode ser ideal quando as modificações na tabela de destino são numerosas em comparação com o tamanho da tabela.
    • Modifique as opções da tabela de destino para usar o recurso de carregamento automático correto quando uma tabela tiver menos linhas e mais campos, como tabelas de dimensão.
    • Inclua um comando SQL para remover atualizações parciais anteriores antes dos carregamentos da tabela.

O carregamento automático verifica a tabela de destino quanto a linhas existentes antes de adicionar novas linhas à tabela. No entanto, a utilização da opção de carregamento automático pode tornar os jobs lentos. Considere esta técnica quando a tabela de destino for grande e as modificações na tabela forem relativamente poucas.

Os comandos SQL de pré-carregamento podem remover atualizações parciais do banco de dados que ocorrem durante a execução incompleta de uma etapa em um job. Normalmente, o comando SQL de pré-carregamento exclui linhas com base em uma variável definida antes do início da etapa de inserção parcial.

Nota

Para obter mais informações sobre o pré-carregamento de comandos SQL, consulte o Guia do Designer:

https://help.sap.com/docs/SAP_DATA_SERVICES/ec06fadc50b64b6184f835e4f0e1f52f/5739cbd36d6d1014b3fc9283b0e91070.html?locale=en-US&q=preload%20sql

Valores ou linhas ausentes

  • Tratar valores ausentes com validação ou transformação de consulta
  • Tratar linhas ausentes com as opções Usar arquivo de estouro.

As linhas em falta são linhas que não podem ser inseridas na tabela de destino. Por exemplo, linhas podem estar em falta em instâncias em que uma restrição de chave primária é violada. Os arquivos de estouro ajudam a processar esse tipo de problema de dados.

Quando você especifica um arquivo de estouro e o Data Services não pode carregar uma linha em uma tabela, o Data Services grava a linha no arquivo de estouro. O log de rastreamento indica o fluxo de dados no qual o carregamento falhou e a localização do arquivo. Use as informações de estouro para identificar dados inválidos na fonte ou problemas introduzidos no movimento de dados. Cada nova execução sobregrava o arquivo de estouro existente.

Ao utilizar arquivos de estouro, você precisa inserir um nome de arquivo e um formato de arquivo.

Para o formato do arquivo, você tem duas opções:

  • Se você selecionar Gravar dados, poderá usar o Data Services para ler os dados do arquivo de estouro, limpá-los e carregá-los na tabela de destino.
  • Se você selecionar Gravar SQL, poderá usar os comandos SQL para carregar o destino manualmente quando o destino for acessível.

Cuidado

Dê um nome de caminho completo para seu arquivo de estouro para garantir que o Data Services crie um arquivo exclusivo quando mais de um arquivo for criado no mesmo trabalho.

Fluxos de trabalho alternativos

Você pode configurar jobs para utilizar fluxos de trabalho alternativos que cobrem todas as exceções possíveis e que tenham mecanismos de recuperação integrados. Esta técnica permite automatizar o processo de recuperação de resultados.

Neste exemplo, o fluxo de dados principal está usando configurações padrão para carregar uma tabela de destino.

Em caso de erro, o job registra a falha. Depois de corrigir o problema, você executa o job novamente.

A próxima execução usará outro fluxo de dados com a opção de carregamento automático correto. Assim, permitindo que o fluxo de dados seja concluído com êxito, apesar das linhas que podem já ter sido confirmadas pela primeira vez.

A execução com êxito precisa ser registrada para a próxima execução do job para usar o fluxo de dados padrão.

Componentes de workflow alternativos

Os fluxos de trabalho alternativos consistem em vários componentes, como mostrado na figura anterior:

  1. Um script para determinar quando uma recuperação é necessária.

    Este script lê o valor em uma tabela de status e preenche uma variável global com o mesmo valor. O valor inicial é definido para indicar que uma recuperação não é necessária.

  2. Uma condição que chama o fluxo de trabalho apropriado com base em se a recuperação é necessária.

    O condicional contém uma instrução If/Then/Else que especifica que os fluxos de trabalho não requerem recuperação são processados de uma forma, e aqueles que exigem recuperação são processados de outra forma.

  3. Um fluxo de trabalho com um bloco try/catch para executar um fluxo de dados sem recuperação.

    O fluxo de dados onde a recuperação não é necessária é configurado sem a opção de carregamento automático correto. Isso garante que, sempre que possível, o fluxo de dados seja executado em um modo menos intensivo de recursos.

  4. Um script no objeto de interceptação para atualizar a tabela de status.

    O script especifica que a recuperação é necessária se forem geradas exceções.

  5. Um fluxo de trabalho para executar um fluxo de dados com recuperação e um script para atualizar a tabela de status.

    O fluxo de dados é configurado para um processamento mais intensivo que resolverá as exceções. O script atualiza a tabela de status para indicar que a recuperação não é necessária.

Condições

Os condicionais são objetos de utilização única utilizados para implementar a lógica condicional em um fluxo de trabalho.

Quando condicional for definido, especifique uma condição e duas ramificações lógicas:

InstruçãoDescrição
SeUma expressão booleana que avalia como VERDADEIRO ou FALSO. Use funções, variáveis e operadores padrão para construir a expressão.
EntãoElemento de workflow a ser executado se a expressão IF for avaliada como TRUE.
SenãoElemento de workflow a ser executado se a expressão IF for avaliada como FALSE.

As ramificações Then e Else do condicional podem conter qualquer objeto que você possa ter em um fluxo de trabalho, incluindo outros fluxos de trabalho, fluxos de dados, condicionais aninhados, blocos try/catch, scripts e assim por diante.

Experimentar/Interceptar blocos

Um bloco try/catch permite que você indique workflows alternativos se ocorrerem erros durante a execução do job.

Os blocos Try/catch capturam classes de erros especificadas, aplicam as soluções fornecidas e continuam a execução.

Você pode indicar várias operações de interceptação em um mesmo bloco, para diferentes classes ou erros.

Para cada interceptação

  • Indique uma exceção ou grupo de exceções tratadas pela interceptação.

    Para tratar mais de uma exceção ou grupo de exceções, adicione mais capturas ao bloco try/catch.

  • Especifique o fluxo de trabalho a ser executado se a exceção indicada ocorrer.

    Use um fluxo de trabalho existente ou defina um fluxo de trabalho no editor de interceptação.

Se uma exceção é lançada durante a execução de um bloco try/catch, e se nenhuma interceptação estiver procurando por essa exceção, então a exceção é tratada pela lógica de erro normal.

Vamos tentar isso

Deixe-me orientá-lo sobre o uso de um fluxo de trabalho alternativo. Primeiro, vamos preparar todos os objetos de que precisamos:

Agora, deixe-me orientá-lo na criação do fluxo de trabalho alternativo: