Programa
A Snowflake é uma plataforma de dados nativa da nuvem amplamente usada por profissionais de dados devido à sua escalabilidade, desempenho e simplicidade, o que a torna ideal para tudo, desde a análise até a ciência de dados. No entanto, para que você possa tirar o máximo proveito da ferramenta, é essencial dominar a ingestão de dados do Snowflake. Se você é novo na plataforma, sugiro que comece com este Tutorial do Snowflake para iniciantes para que você se familiarize primeiro com sua arquitetura.
Pipelines de ingestão de dados eficientes e desenvolvidos adequadamente são essenciais para garantir que os dados estejam disponíveis e sejam confiáveis para casos de uso downstream. Seja lidando com atualizações periódicas em lote ou com fluxos de dados em tempo real, a escolha do método e das ferramentas de ingestão corretos afeta diretamente o desempenho e a capacidade de manutenção do seu pipeline de dados.
Antes de entrar em detalhes, é essencial que você entenda alguns conceitos-chave sobre o fluxo de dados..:
- Ingestão em lote vs. em tempo real: Os processos em lote carregam dados em intervalos programados, oferecendo pedaços de dados de uma só vez. A ingestão em tempo real garante que os dados estejam disponíveis quase em tempo real à medida que são gerados e são vistos como uma transmissão ao vivo. Você pode aprender mais com este artigo sobre Processamento em lote versus processamento em fluxo.
- Dados estruturados vs. semiestruturados: Os dados estruturados se encaixam perfeitamente em linhas e colunas, enquanto os dados semiestruturados (como JSON ou Avro) exigem um manuseio mais flexível e usam tags ou marcadores para ajudar a ingerir os dados.
O que é ingestão de dados no Snowflake?
A ingestão de dados refere-se ao processo de mover dados de várias fontes para um banco de dados para armazenamento, processamento e análise. Independentemente de seus dados serem originários de armazenamento em nuvem, bancos de dados, aplicativos ou fluxos de eventos, a ingestão atua como a primeira etapa do ciclo de vida dos dados no Snowflake.
A arquitetura exclusiva do Snowflake separa a computação e o armazenamento. Isso permite um processo simplificado de ingestão de dados sem afetar o desempenho analítico. A ingestão pode ter como alvo estágios internos (dentro do Snowflake) ou externos (como o S3 ou o Azure Blob Storage), dependendo da fonte de dados e do caso de uso. Para obter mais informações, este artigo analisa profundamente a Arquitetura Snowflake.
Principais considerações sobre a ingestão
Ao projetar um pipeline de ingestão, tenha em mente os Quatro Vs dos dados:
- Volume: Quantos dados você está ingerindo?
- Velocidade: Com que frequência você recebe os dados?
- Variedade: Quais formatos estão envolvidos (CSV, JSON, Parquet)?
- Veracity: Qual é o grau de confiança dos dados e qual é o nível de limpeza necessário?
É importante que você considere esses quatro componentes. O volume e a velocidade exigirão que consideremos a largura de banda disponível para nosso pipeline e sua capacidade de processar dados. A variedade e a veracidade exigirão que desenvolvamos pipelines robustos e flexíveis, capazes de verificar a qualidade dos dados à medida que eles fluem.
Métodos de ingestão de dados no Snowflake
Vamos discutir alguns dos métodos de ingestão de dados que temos disponíveis no Snowflake. Alguns métodos envolvem o uso de um comando como COPY INTO
, Snowpipe ou Snowpipe streaming.
Ingestão em lote com COPY INTO
O método de ingestão mais fundamental do Snowflake é o comando COPY INTO
. COPY INTO
carrega dados de arquivos armazenados em estágios externos para as tabelas do Snowflake. É ideal para carregar dados históricos em massa ou atualizações regulares em lote.
Carregando dados do armazenamento em nuvem
Você pode carregar dados do Amazon S3, do Azure Blob Storage ou do Google Cloud Storage criando um estágio externo que conecte esses serviços de nuvem ao Snowflake. Com o caminho correto do arquivo e as credenciais, o Snowflake lê e processa os arquivos com eficiência.
Manipulação de diferentes formatos de dados
COPY INTO
suporta vários formatos: CSV, JSON, Avro, ORC e Parquet. Como parte da criação do conector, há várias opções de tipo de formato. A lista é bastante extensa, mas geralmente há configurações para definir coisas como o formato das datas, delimitadores (vírgulas ou outros valores), codificação, opções nulas e assim por diante. Recomendo que você leia a documentação no site da Snowflake para obter todos os detalhes.
Tratamento e monitoramento de erros
Você pode configurar a opção ON_ERROR
para ignorar linhas problemáticas, abortar o carregamento ou registrar erros. Combine isso com o programa VALIDATION_MODE
para rastrear e retornar erros. Você pode usar tabelas de metadados como LOAD_HISTORY
, que também rastreiam o número de erros que ocorrem durante uma carga.
Ingestão contínua com Snowpipe
O Snowpipe permite a ingestão contínua, detectando e carregando automaticamente novos arquivos à medida que eles aparecem em um estágio designado. Essa funcionalidade está incorporada à plataforma Snowflake. Ele oferece integração automática de arquivos, acionadores baseados em eventos e monitoramento.
Automatização da ingestão de arquivos
O Snowpipe pode ser configurado para testar automaticamente os arquivos por meio da integração com notificações de armazenamento em nuvem, reduzindo a necessidade de execução manual. Por exemplo, o Amazon S3 tem notificações de eventos que alertam os usuários sobre alterações em um determinado bucket.
O Snowpipe pode ser conectado a um usuário que vê essas notificações. Quando uma notificação de evento for recebida por esse usuário, o Snowpipe será acionado para iniciar o processo de ingestão de dados.
Diagrama de ingestão automatizada de dados(Documentação do Snowflake)
Monitoramento e gerenciamento
O Snowflake fornece algumas ferramentas diferentes de monitoramento e gerenciamento de erros. A tabela de metadados PIPE_USAGE_HISTORY
permite que os usuários visualizem o histórico de carregamento de dados, como bytes e arquivos ingeridos. Na tabela VALIDATE_PIPE_LOAD
, você encontrará informações sobre os erros que ocorrem.
No Snowpipe, há a configuração ON_ERROR
, que nos permite ignorar arquivos e enviar notificações que nos alertam sobre os erros.
Transmissão em tempo real com o Snowpipe Streaming
O Snowpipe Streaming é o mais novo método do Snowflake para ingerir dados de streaming em tempo real com latência de menos de um segundo. Ao contrário do Snowpipe, que reage a arquivos, o Snowpipe Streaming ingere dados linha por linha por meio de uma API. Esses métodos se complementam, oferecendo flexibilidade e eficiência.
Usando o SDK de ingestão do Snowflake
O Snowflake Ingest SDK permite que os desenvolvedores escrevam aplicativos Java ou Scala que enviam dados diretamente para o Snowflake usando uma fila residente na memória. Esses aplicativos são projetados para aceitar dados em nível de linha de locais como tópicos do Apache Kafka e outros conectores de streaming.
Casos de uso e benefícios
Perfeito para dados de telemetria, clickstream ou IoT, o Snowpipe Streaming garante a disponibilidade de dados quase em tempo real com o mínimo de sobrecarga de armazenamento e alta taxa de transferência. Esse método de ingestão é perfeito quando você precisa de dados de alta velocidade quase em tempo real.
Ferramentas para ingestão de dados no Snowflake
Como parte da ingestão de dados no Snowflake usando coisas como o Snowpipe e o Snowpipe Streaming, há algumas ferramentas que são necessárias para que você conecte os pipelines de dados adequadamente. Uma das principais ferramentas é o Kafka, que é comumente usado como uma ferramenta de comunicação entre as fontes de dados e o Snowflake. Como alternativa, existem algumas ferramentas de terceiros, como Fivetran e Matillion, que também podem gerenciar o ETL no Snowflake.
Conector Snowflake para Kafka
O Snowflake oferece um conector Kafka que lê tópicos do Kafka e grava mensagens diretamente no armazenamento do Snowflake. Os dados são publicados no Kafka e, usando o Snowpipe ou o Snowpipe Streaming, o Snowflake pode pegar esses dados publicados e transferi-los para o armazenamento interno. Essa é uma maneira extremamente flexível de transferir dados. Recomendo a você este curso Introduction to Apache Kafka, que aborda o poder e a escalabilidade do Kafka.
Configuração e práticas recomendadas do Kafka
Você precisará configurar um trabalhador do Kafka Connect e definir parâmetros como nomes de tópicos, tamanhos de buffer e credenciais do Snowflake para configurar corretamente a integração.
Essas configurações também nos permitem definir os tipos de dados e as informações de metadados que gostaríamos de rastrear. As duas principais maneiras de definir essas conexões são por meio do Confluent (uma versão gerenciada por terceiros do Apache Kafka) ou manualmente usando o Apache Kafka JDK de código aberto.
Independentemente de qual você escolher, siga estas práticas recomendadas:
- Use o particionamento e a ordenação baseada em chaves para manter a sequência de eventos.
- Otimize os intervalos de descarga para equilibrar a latência e a taxa de transferência.
Exemplo de uso do Kafka com o Snowflake SDK para streaming de dados(Documentação do Snowflake)
Ferramentas ETL de terceiros
Além do Kafka, há plataformas ETL de terceiros, como Fivetran, Matillion e Talend, que fornecem soluções ETL/ELT gerenciadas para ingerir e transformar dados de centenas de fontes no Snowflake. Essas plataformas de terceiros geralmente oferecem soluções SaaS simplificadas e de baixo código para o gerenciamento de dados, mas a escolha dessas plataformas tem suas próprias desvantagens.
Prós e contras de ferramentas ETL de terceiros
Alguns aspectos precisam ser considerados com cuidado ao usar ferramentas de ETL de terceiros, como custo e flexibilidade. Embora sejam abordagens definitivamente simplificadas para a ingestão de dados no Snowflake, pode haver algumas restrições que acabarão tornando seu uso mais desafiador.
- Pros: Configuração sem código, conectores para ferramentas SaaS comuns, recursos de transformação incorporados, simplificados e fáceis de integrar
- Contras: Custo de assinatura, controle limitado para lógica personalizada e, muitas vezes, preso ao fornecedor sem uma maneira fácil de migrar
Sabendo dessas restrições, ao decidir sobre a ferramenta certa, você deve considerar:
- O conhecimento técnico da sua equipe
- Requisitos de frequência e latência
- Suporte ao sistema de origem
- Restrições orçamentárias e de licenciamento
Práticas recomendadas para ingestão de dados do Snowflake
Embora projetar um pipeline seja um trabalho árduo, há alguns conceitos gerais e práticas recomendadas que você pode seguir para facilitar a sua vida. Eles têm como objetivo melhorar a eficiência e minimizar os custos.
Otimize o desempenho e o custo
Minimize o tamanho dos seus arquivos para reduzir o custo de armazenamento de dados usando formatos de arquivo como gzip ou Parquet. Além disso, quando os dados são transferidos, geralmente é melhor favorecer menos arquivos maiores em vez de muitos arquivos menores para o processo de cópia. Arquivos grandes individuais têm menos sobrecarga de rede do que tentar transferir vários arquivos menores. Por fim, programe grandes trabalhos em lote fora do horário de pico se os custos de computação e de rede forem uma preocupação.
Por fim, certifique-se de lidar com a evolução do esquema em seus pipelines. Alguns tipos de dados, como o Parquet, permitem naturalmente a evolução do esquema. Isso significa que, embora o esquema de dados possa ser alterado em relação à fonte de dados, isso não afeta os dados históricos e mantém a compatibilidade entre os dados para frente e para trás.
Garantir a qualidade e a observabilidade dos dados
Outro aspecto a ser considerado durante o pipeline de ingestão de dados é garantir a qualidade e a observabilidade dos dados. Uma maneira inteligente de fazer isso é preparar os dados antes de integrá-los ao armazenamento final do banco de dados. Você pode querer verificar hashes e metadados para garantir a precisão dos dados e a ausência de corrupção. Além disso, em vez de permitir que os usuários tenham acesso direto aos próprios dados, a criação de exibições que combinem fontes de dados diferentes pode proporcionar uma melhor experiência ao usuário.
Por fim, você deseja monitorar e registrar constantemente a integridade do seu pipeline de dados. Configure painéis usando as visualizações de metadados do Snowflake ou ferramentas externas de observabilidade, como DataDog ou Monte Carlo, para que você acompanhe o sucesso da ingestão, a latência e as falhas.
Tutorial prático: Ingerindo dados no Snowflake
Aqui, abordaremos alguns exemplos de alto nível de como você pode criar pipelines no Snowflake. Observe que as etapas exatas podem ser diferentes, dependendo de como o administrador de dados configurou o ambiente Snowflake. Certifique-se de seguir as práticas recomendadas de sua organização!
Pré-requisitos
Primeiro, alguns pré-requisitos. Você precisará de uma conta Snowflake que lhe permita gerenciar o banco de dados. Algumas permissões de acesso comuns de que você precisará são a capacidade de criar esquemas. Em segundo lugar, você deve se certificar de que o servidor em que você está tem acesso ao bucket de armazenamento em nuvem externo ou ao armazenamento interno onde você está armazenando os dados. Fale com o administrador do banco de dados sobre isso.
Etapa 1: Carregando dados usando COPY INTO
Vamos ver um exemplo simples de como carregar um arquivo CSV no banco de dados do Snowflake.
1. Prepare e faça upload dos dados Formate seus arquivos (por exemplo, CSV) e faça o upload deles para o seu bucket de armazenamento em nuvem.
2. Criar estágio e formato de arquivo
/* specify the file format */CREATE FILE FORMAT my_csv_format TYPE = 'CSV'
/* this will help if there are double quotes or apostrophes in your data */
FIELD_OPTIONALLY_ENCLOSED_BY='"';
/* Stage the data using the credentials you have */
CREATE STAGE my_stage URL='s3://my-bucket/data/' CREDENTIALS=(AWS_KEY_ID='...' AWS_SECRET_KEY='...');
3. Execute COPY INTO
e verifique
COPY INTO my_table FROM @my_stage FILE_FORMAT = (FORMAT_NAME = 'my_csv_format');SELECT * FROM my_table;
Etapa 2: Automatizando a ingestão com o Snowpipe
Criar uma ingestão automatizada usando o Snowpipe pode ser muito simples!
1. Criar tubo de neve
CREATE PIPE my_pipe
AUTO_INGEST = TRUE
AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'
AS
COPY INTO my_table
FROM @my_stage
FILE_FORMAT = (TYPE = ‘CSV’);
2. Configurar eventos de armazenamento em nuvem Configure a notificação do bucket S3 para acionar o pipe usando SNS/SQS. Para obter mais detalhes, eu seguiria este guia sobre AWS SNS da Datacamp.
3. Monitorar a ingestão
Certifique-se de que você consulte a tabela de metadados SNOWPIPE_EXECUTION_HISTORY
para visualizar a atividade do pipe.
Etapa 3: Transmissão de dados com o Snowpipe Streaming
A configuração do Snowpipe Streaming pode ser bastante intensa e é um pouco mais detalhada do que podemos abordar aqui. Abordarei algumas das etapas fundamentais, mas recomendo principalmente que você leia os exemplos da documentação do Snowflake Streaming para você saber como criar o SDK do cliente.
- Configurar o SDK: Instale o Snowflake Ingest SDK em seu aplicativo Java ou Scala. Em seguida, defina as configurações de conexão da API em um arquivo
profile.json
. As propriedades necessárias envolvem credenciais de autorização, URL para o Snowflake e o usuário. Isso permite que o SDK se conecte ao seu servidor Snowflake. Escreva o restante do script Java para lidar com a chegada dos dados, incluindo o métodoinsertRows
. - Transmita dados com um aplicativo de amostra: Envie os dados do seu conector Kafka usando o ClientSDK para chamar a API do Snowflake.
- Monitorar e tratar erros: Capture exceções de SDK, tente novamente solicitações com falha e monitore as métricas de ingestão usando tabelas de metadados e painel. Certifique-se de que sua API foi projetada para interromper erros e enviar notificações de erro.
Conclusão
O Snowflake oferece um conjunto robusto e flexível de métodos de ingestão de dados, desde cargas tradicionais em lote até streaming em tempo real. Ao compreender as ferramentas e técnicas disponíveis, as equipes de dados podem projetar pipelines que sejam confiáveis, eficientes e econômicos. Não importa se você está apenas começando ou otimizando uma solução em escala empresarial, dominar a ingestão de dados do Snowflake é uma etapa crítica na criação de uma pilha de dados moderna. Se você quiser saber mais sobre o Snowflake, recomendo os seguintes recursos:
Perguntas frequentes sobre a ingestão de dados do Snowflake
Qual é a diferença entre o Snowpipe e o Snowpipe Streaming?
O Snowpipe ingere dados de arquivos (geralmente armazenados em nuvem) à medida que eles chegam, usando acionadores baseados em eventos. O Snowpipe Streaming ingere dados diretamente de um aplicativo em tempo real, linha por linha, usando um SDK, permitindo latência de menos de um segundo.
O Snowflake pode detectar automaticamente as alterações de esquema em meus dados de entrada?
Não automaticamente. Você precisará implementar estratégias de evolução de esquemas manualmente ou com ferramentas que as suportem. Para dados semiestruturados como JSON, você pode usar colunas variantes para acomodar estruturas dinâmicas.
Como posso monitorar se minha ingestão de dados está funcionando corretamente?
O Snowflake oferece várias exibições, como LOAD_HISTORY
, PIPE_USAGE_HISTORY
e TASK_HISTORY
, para que você acompanhe os eventos de ingestão, os erros e o desempenho. Você também pode fazer a integração com ferramentas de observabilidade para alertas e painéis.
Quais formatos de arquivo são suportados pelo Snowflake para ingestão?
O Snowflake oferece suporte a CSV, JSON, Avro, ORC, Parquet e XML. Você define como o arquivo deve ser interpretado usando um objeto de formato de arquivo.
Você pode ingerir dados no Snowflake a partir de fontes que não sejam o armazenamento em nuvem ou o Kafka?
Sim. Você pode ingerir dados usando ferramentas de terceiros (por exemplo, Fivetran, Matillion, Airbyte), a API REST do Snowflake, o Snowpipe Streaming ou scripts personalizados usando conectores ou SDKs.