Snowpipe Streaming: arquitetura de alto desempenho

A arquitetura de alto desempenho do Snowpipe Streaming foi projetada para organizações modernas e com uso intensivo de dados que exigem insights quase em tempo real. Essa arquitetura de última geração aumenta significativamente o rendimento, a eficiência e a flexibilidade da ingestão em tempo real no Snowflake.

Para obter informações sobre a arquitetura clássica, consulte Snowpipe Streaming – Arquitetura clássica. Para saber as diferenças entre o SDK clássico e o SDK de alto desempenho, consulte Comparação entre o SDK clássico e o SDK de alto desempenho.

Principais recursos

  • Taxa de transferência e latência:

    • Alto rendimento: desenvolvido para oferecem suporte a velocidades de ingestão de até 10 GB/s por tabela.

    • Insights quase em tempo real: obtém latências de ingestão de ponta a ponta para consulta dentro de 5 a 10 segundos.

  • Faturamento:

  • Ingestão flexível:

    • Java SDK e Python SDK: use o novo snowpipe-streaming SDK, com um núcleo de cliente baseado em Rust para melhorar o desempenho no cliente e diminuir o uso de recursos.

    • REST API: fornece um caminho de ingestão direta, simplificando a integração para cargas de trabalho leves, dados de dispositivos IoT e implementações de borda.

    Nota

    Recomendamos usar o snowpipe-streaming SDK como a escolha principal e padrão. A REST API não é otimizada para cenários de alto rendimento.

  • Manuseio otimizado de dados:

    • Transformações em trânsito: oferece suporte à limpeza e à remodelagem de dados durante a ingestão usando a sintaxe de comando COPY no objeto PIPE.

    • Visibilidade aprimorada do canal: melhor percepção do status de ingestão principalmente por meio da exibição do histórico do canal no Snowsight e de uma nova GET_CHANNEL_STATUS API.

Essa arquitetura é recomendada para:

  • Ingestão consistente de cargas de trabalho de streaming de alto volume.

  • Alimentação de análises e painéis em tempo real para a tomada de decisões urgentes.

  • Integração eficiente de dados de dispositivos IoT e implementações de borda.

  • Organizações que buscam preços transparentes, previsíveis e baseados na taxa de transferência para ingestão de streaming.

Novos conceitos: o objeto PIPE

Ao mesmo tempo em que herda os principais conceitos, como canais e tokens de deslocamento, do Snowpipe Streaming Classic, essa arquitetura apresenta o objeto PIPE como um componente central.

O objeto PIPE é um objeto Snowflake nomeado que atua como ponto de entrada e camada de definição para todos os dados de streaming ingeridos. Ele fornece o seguinte:

  • Definição de processamento de dados: define como os dados de streaming são processados antes de serem confirmados na tabela de destino, incluindo buffer no lado do servidor para transformações ou mapeamento de esquema.

  • Habilitação de transformações: permite a manipulação de dados em trânsito (por exemplo, filtragem, reordenação de colunas, expressões simples) ao incorporar a sintaxe de transformação do comando COPY.

  • Suporte a recursos de tabela: trata a ingestão em tabelas com chaves de clustering definidas, colunas de valor DEFAULT e colunas AUTOINCREMENT (ou IDENTITY).

  • Gerenciamento de esquema: ajuda a definir o esquema esperado dos dados de streaming de entrada e seu mapeamento para as colunas da tabela de destino, permitindo a validação do esquema no lado do servidor.

Pré-clustering de dados durante a ingestão

O Snowpipe Streaming pode fazer um clustering de dados em uso durante a ingestão, o que melhora o desempenho das consultas em suas tabelas de destino. Esse recurso classifica seus dados diretamente durante a ingestão antes de serem confirmados. Essa classificação dos dados otimiza a organização para acelerar as consultas.

Para aproveitar o pré-clustering, sua tabela de destino deve ter chaves de clustering definidas. Depois, você pode ativar esse recurso definindo o parâmetro CLUSTER_AT_INGEST_TIME como TRUE na instrução COPY INTO ao criar ou substituir o canal do Snowpipe Streaming.

Para obter mais informações, consulte CLUSTER_AT_INGEST_TIME. Esse recurso só está disponível na arquitetura de alto desempenho.

Diferenças em relação ao Snowpipe Streaming Classic

Para os usuários familiarizados com a arquitetura clássica, a arquitetura de alto desempenho apresenta as seguintes alterações:

  • Novos SDK e APIs: requer o novo snowpipe-streaming SDK (Java SDK e REST API), exigindo atualizações do código de cliente para migração.

  • Requisito de objeto PIPE: todas as definições de ingestão, configurações (por exemplo, transformações) e esquemas de dados são gerenciadas por meio do objeto PIPE no lado do servidor, uma mudança em relação à configuração mais orientada pelo cliente do Classic.

  • Associação de canais: os aplicativos clientes abrem canais em um objeto PIPE específico, não diretamente em uma tabela de destino.

  • Validação de esquema: passa do lado do cliente (SDK clássico) para a aplicação no lado do servidor pelo Snowflake, com base no objeto PIPE.

  • Requisitos de migração: é necessário modificar o código do aplicativo cliente para o novo SDK e definir objetos PIPE no Snowflake.

Limitações e considerações

  • Opção Snowpipe ON_ERROR: a opção STREAMING Snowpipe ON_ERROR apenas oferece suporte para CONTINUE.

  • Arquiteturas compatíveis (Rust Core): Arm64 Mac, Windows, Arm64-linux e X86_64-linux.

  • Requisitos do Linux: se você estiver usando o SDK no Linux, seu sistema precisa ter pelo menos a versão 2.28 da biblioteca glibc instalada.

  • Ambiente de implementação: somente as implementações no AWS são compatíveis.

  • Tabelas agrupadas (ingestão): embora as tabelas agrupadas possam ser tabelas de destino, nenhum clustering ocorrerá durante o processo de ingestão.

  • Replicação: não há suporte para replicação.

  • ALTER PIPE SET PIPE_EXECUTION_PAUSED = true: embora o openChannel falhe quando pausado, a ingestão pode não parar imediatamente.

  • Função de autorização: a função padrão é usada para autorização. A capacidade de especificar outras funções está planejada para o futuro.

  • Fuso horário: o SDK usará automaticamente o UTC. Os usuários não poderão alterar essa configuração.

  • Restrição de carga útil vazia: O SDK e a REST API não oferecem suporte ao envio de conjuntos de linhas com uma carga útil vazia. Os envios devem incluir pelo menos uma linha de dados para que a ingestão tenha sucesso.

  • Visibilidade da mensagem de erro: embora as mensagens de erro estejam disponíveis na resposta de status do canal, elas não são mostradas na nova exibição de histórico do canal.