Tratamento de erros no Snowpipe Streaming de alto desempenho

Este tópico descreve os mecanismos de tratamento de erros disponíveis na edição de alto desempenho do Snowpipe Streaming. Essa abordagem aprimorada fornece informações detalhadas sobre os erros e melhora o processo geral de tratamento de erros para proporcionar uma experiência mais robusta e informativa.

Principais recursos de tratamento de erros na arquitetura de alto desempenho

  • Ponto de extremidade de status do canal aprimorado: esta edição amplia o ponto de extremidade de status do canal para fornecer informações de erro mais abrangentes.

  • Detalhes granulares de erros: a edição de alto desempenho fornece informações mais detalhadas sobre os erros para ajudar a identificar onde eles ocorreram e encontrar a raiz das causas dos problemas de ingestão.

  • Experiência aprimorada do cliente: a edição de alto desempenho simplifica o tratamento de erros para os clientes, reduzindo a complexidade de raciocínio e da recuperação de erros.

  • A exibição do histórico do canal: Exibição SNOWPIPE_STREAMING_CHANNEL_HISTORY fornece um registro histórico da atividade do canal para monitorar e localizar erros. Esse recurso permite rastrear tendências de erro e resolver proativamente possíveis problemas.

Detalhes do ponto de extremidade de status do canal

A arquitetura de alto desempenho inclui um ponto de extremidade de status do canal para fornecer informações mais detalhadas e pontuais sobre um canal.

Além das informações de status do canal para a arquitetura clássica, que é statusCode, persistedOffsetToken, a arquitetura de alto desempenho inclui as seguintes informações:

  • channel_status_code: Representa o status operacional atual do canal de streaming. Este código fornece uma indicação de alto nível da integridade e da capacidade do canal de ingerir dados. Para obter mais informações sobre os códigos de status do canal, consulte Tratamento de erros do lado do cliente e ações necessárias.

  • last_commited_offset_token: indica o token de deslocamento do último conjunto de linhas que foi confirmado com êxito na tabela de destino pelo Snowflake. Isso é fundamental para acompanhar o progresso e garantir o fornecimento de dados.

  • created_on_ms: o carimbo de data/hora, em milissegundos, que indica quando o canal de streaming foi criado inicialmente no Snowflake.

  • database_name: o nome do banco de dados para o qual o canal de streaming está configurado para ingerir dados.

  • schema_name: o nome do esquema no banco de dados especificado onde reside a tabela de destino do canal de streaming.

  • pipe_name: o nome do objeto Snowpipe configurado para utilizar esse canal Snowpipe Streaming para ingestão de dados em uma tabela de destino específica.

  • channel_name: um nome criado pelo usuário para a instância específica do canal Snowpipe Streaming.

  • rows_inserted: uma contagem do número total de linhas de dados inseridas com êxito na tabela de destino por meio desse canal de streaming desde sua criação.

  • rows_parsed: uma contagem do número total de linhas de dados que foram processadas e analisadas pelo serviço Snowpipe Streaming para esse canal. (mas não necessariamente inseridas, por exemplo, devido a erros).

  • rows_error_count: uma contagem do número total de linhas de dados que encontraram erros durante o processamento e, portanto, foram rejeitadas pelo serviço Snowpipe Streaming para esse canal.

  • last_error_offset_upper_bound: o limite superior do intervalo de tokens de deslocamento do último conjunto de linhas que continha erros. Isso ajuda a identificar o local aproximado dos erros mais recentes no fluxo de dados.

  • last_error_message: uma mensagem legível para humanos correspondente ao código de erro mais recente.

  • last_error_timestamp: o carimbo de data/hora que indica quando ocorreu o erro mais recente nesse canal de streaming.

  • snowflake_avg_processing_latency_ms: a latência média, em milissegundos, observada pelo serviço Snowflake no processamento de conjuntos de linhas recebidos por esse canal. Essa métrica fornece informações sobre o desempenho do pipeline de ingestão no Snowflake.

Fluxo de tratamento de erros na arquitetura de alto desempenho

  • O cliente envia dados: o aplicativo cliente usa o Snowpipe Streaming SDK para enviar dados ao Snowflake por meio da appendRow(s) API.

  • Processamento do servidor: o serviço Snowflake processa os dados. Isso envolve:

    • Armazenamento em buffer dos dados.

    • Análise e validação dos dados.

    • Confirmação dos dados na tabela.

  • Detecção de erros: os erros podem ocorrer durante qualquer um dos estágios de processamento no lado do servidor.

  • Registro de erros: o Snowflake registra informações detalhadas sobre o último erro ocorrido, incluindo as seguintes informações:

    • O limite superior do intervalo de tokens de deslocamento do último conjunto de linhas que continha erros. Isso ajuda a identificar o local aproximado dos erros mais recentes no fluxo de dados.

    • Uma mensagem de erro.

    • Um carimbo de data/hora.

  • Relatório de erros:

    • O ponto de extremidade de status de canal aprimorado fornece acesso às informações de erro registradas.

    • Os clientes podem consultar esse ponto de extremidade para recuperar os detalhes do último erro ocorrido.

    • Exibição SNOWPIPE_STREAMING_CHANNEL_HISTORY fornece um registro histórico de erros e seus offsets.

  • Ação do cliente: o aplicativo do cliente usa as informações de erro para executar as seguintes ações:

    • Identificar a causa do erro.

    • Implemente uma lógica apropriada de tratamento de erros, como as seguintes ações:

      • Tentar novamente a operação que falhou.

      • Registrar o erro.

      • Alertar um administrador.

      • Mover os dados errôneos para uma fila de mensagens não entregues.

      • Reabrir canais.

Tratamento de erros do lado do cliente e ações necessárias

O Snowpipe Streaming SDK simplifica o tratamento de erros implementando lógica de nova tentativa interna para erros transitórios. No entanto, para erros fatais de canal e problemas persistentes de autorização, é necessário executar uma ação manual.

Lógica de repetição tentativas do SDK para erros transitórios

O SDK tenta novamente a solicitação de envio de dados não liberados no canal para o servidor para os seguintes códigos de status HTTP, pois eles normalmente indicam um problema de serviço temporário ou transitório:

  • 5XX (Erros do servidor)

  • 429 (Excesso de solicitações)

  • 408 (tempo limite da solicitação)

Erros de canal que exigem uma reabertura manual

O Snowpipe Streaming SDK não reabre o canal automaticamente. Quando um canal entra em um estado que não é válido, o cliente deve fechar e reabrir o canal explicitamente para continuar a ingestão.

Um canal é considerado não válido, e requer ação do cliente, se o canal_status_code na resposta de status do canal for qualquer coisa diferente de SUCCESS.

A tabela a seguir mostra códigos de erro persistentes que indicam um estado fatal do canal e exigem que o canal seja reaberto:

Código de erro

Contexto

Ação necessária do cliente

ERR_PIPE_DOES_NOT_EXIST_OR_NOT_AUTHORIZED

O canal de destino está ausente ou inacessível.

Corrigir o problema do canal. Reabrir o canal.

ERR_TABLE_DOES_NOT_EXIST_NOT_AUTHORIZED

A tabela de destino está ausente ou inacessível.

Corrigir o problema da tabela. Reabrir o canal.

ERR_CHANNEL_HAS_INVALID_ROW_SEQUENCER

O estado de sequenciação de linhas não é válido.

Reabrir o canal.

ERR_CHANNEL_HAS_INVALID_CLIENT_SEQUENCER

O estado de sequenciação do canal não é válido.

Reabrir o canal.

ERR_CHANNEL_MUST_BE_REOPENED

Um erro geral indicando que o canal não pode ser usado.

Reabrir o canal.

ERR_CHANNEL_MUST_BE_REOPENED_DUE_TO_ROW_SEQ_GAP

Uma lacuna na sequência das linhas foi detectada.

Reabrir o canal.

Erros de autorização que exigem correção de configuração

Quando uma tentativa de ingestão resulta em um erro de autorização HTTP, o cliente deve corrigir o problema de permissão ou credencial subjacente. Não reabra o canal para esses erros, pois o novo canal encontrará imediatamente o mesmo problema.

  • 401 (Não autorizado)

  • 403 (Proibido)

Para esses erros, a ingestão deve ser interrompida e a configuração de segurança do aplicativo cliente – por exemplo, permissões de canal, função do usuário, credenciais de autenticação – deve ser corrigida antes que a ingestão possa ser retomada. Depois de corrigir o problema de autorização, você pode reabrir o cliente para continuar a ingestão.