Snowpipe¶
O Snowpipe permite carregar dados de arquivos assim que estiverem disponíveis em um estágio. Isso significa que você pode carregar dados de arquivos em microlotes, tornando-os disponíveis aos usuários em minutos, em vez de executar manualmente instruções COPY em um cronograma para carregar lotes maiores.
Neste tópico:
Como funciona o Snowpipe?¶
O Snowpipe carrega dados de arquivos assim que eles estiverem disponíveis em um estágio. Os dados são carregados de acordo com a instrução COPY definida em um canal referenciado.
Um canal é um objeto do Snowflake nomeado de primeira classe, que contém uma instrução COPY usada pelo Snowpipe. A instrução COPY identifica o local de origem dos arquivos de dados (ou seja, um estágio) e uma tabela de destino. Todos os tipos de dados são suportados, incluindo tipos de dados semiestruturados, tais como JSON e Avro.
Estão disponíveis diferentes mecanismos para a detecção dos arquivos preparados:
Automatização do Snowpipe usando mensagens em nuvem
Os carregamentos automatizados de dados aproveitam as notificações de eventos para armazenamento em nuvem e informam o Snowpipe sobre a chegada de novos arquivos de dados a serem carregados. O Snowpipe pesquisa as notificações de eventos de uma fila. Ao usar os metadados na fila, o Snowpipe carrega os novos arquivos de dados na tabela de destino de maneira contínua e sem servidor, com base nos parâmetros definidos em um objeto de canal especificado.
Chamada dos pontos de extremidade REST do Snowpipe
Seu aplicativo cliente chama um ponto de extremidade REST público com o nome de um objeto de canal e uma lista de nomes de arquivos de dados. Se novos arquivos de dados correspondentes à lista forem descobertos no estágio referenciado pelo objeto de canal, eles são enfileirados para carregamento. Os recursos computacionais fornecidos pelo Snowflake carregam os dados da fila em uma tabela do Snowflake com base nos parâmetros definidos no canal.
Serviços de armazenamento em nuvem suportados¶
A tabela a seguir indica o suporte do serviço de armazenamento em nuvem para chamadas do Snowpipe automatizado e Snowpipe REST API a partir de contas Snowflake hospedadas em cada plataforma de nuvem:
Host da conta Snowflake |
Amazon S3 |
Google Cloud Storage |
Armazenamento de blobs do Microsoft Azure |
Microsoft Data Lake Storage Gen2 |
Microsoft Azure de uso geral v2 |
---|---|---|---|---|---|
Amazon Web Services |
✔ |
✔ |
✔ |
✔ |
✔ |
Google Cloud Platform |
✔ |
✔ |
✔ |
✔ |
✔ |
Microsoft Azure |
✔ |
✔ |
✔ |
✔ |
✔ |
Para obter mais informações, consulte Automatização do carregamento contínuo de dados usando mensagens em nuvem e Visão geral dos pontos de extremidade REST do Snowpipe para carregar dados.
Observe que as regiões governamentais dos provedores de nuvem não permitem o envio de notificações de eventos de ou para outras regiões comerciais. Para obter mais informações, consulte AWS GovCloud (US) e Azure Government.
Importante
O Snowflake recomenda que você habilite a filtragem de eventos da nuvem para o Snowpipe para reduzir custos, ruído de eventos e latência. Para obter mais informações sobre a configuração da filtragem de eventos para cada provedor de nuvem, consulte as seguintes páginas:
Como o Snowpipe é diferente do carregamento de dados em massa?¶
Esta seção descreve brevemente as principais diferenças entre o Snowpipe e um fluxo de trabalho de carregamento de dados em massa usando o comando COPY. Detalhes adicionais são fornecidos em toda a documentação do Snowpipe.
Autenticação¶
- Carregamento de dados em massa:
Baseia-se nas opções de segurança suportadas pelo cliente para autenticar e iniciar uma sessão de usuário.
- Snowpipe:
Ao chamar os pontos de extremidade REST: Requer autenticação de par de chaves com Token Web JSON (JWT). JWTs são assinados usando um par de chaves públicas/privadas com criptografia RSA.
Histórico de carregamento¶
- Carregamento de dados em massa:
Armazenado nos metadados da tabela de destino por 64 dias. Disponível após a conclusão da instrução COPY como saída da instrução.
- Snowpipe:
Armazenado nos metadados do canal por 14 dias. Deve ser solicitado ao Snowflake por meio de um ponto de extremidade REST, função de tabela SQL ou exibição ACCOUNT_USAGE.
Importante
Para evitar recarregar arquivos (e duplicar dados), recomendamos carregar dados de um conjunto específico de arquivos usando ou o carregamento de dados em massa ou o Snowpipe, mas não ambos.
Transações¶
- Carregamento de dados em massa:
Os carregamentos são sempre realizados em uma única transação. Os dados são inseridos na tabela juntamente com outras instruções SQL enviadas manualmente pelos usuários.
- Snowpipe:
Os carregamentos são combinados ou divididos em uma única ou várias transações com base no número e tamanho das linhas em cada arquivo de dados. Linhas de arquivos parcialmente carregados (com base na configuração da opção de cópia ON_ERROR) também podem ser combinadas ou divididas em uma ou mais transações.
Recursos de computação¶
- Carregamento de dados em massa:
Requer um warehouse especificado pelo usuário para executar as instruções COPY.
- Snowpipe:
Usa os recursos computacionais fornecidos pelo Snowflake.
Custo¶
- Carregamento de dados em massa:
Cobrado pelo tempo que cada warehouse virtual está ativo.
- Snowpipe:
Cobrado de acordo com os recursos computacionais utilizados no warehouse Snowpipe durante o carregamento dos arquivos.
Tamanho de arquivo de carregamento recomendado¶
Para uma experiência de carregamento mais eficiente e econômica com o Snowpipe, recomendamos seguir as recomendações de dimensionamento de arquivos em Práticas recomendadas e limitações para o dimensionamento de arquivos e realizar a preparação de arquivos uma vez por minuto. Esta abordagem normalmente leva a um bom equilíbrio entre o custo (ou seja, recursos gastos no gerenciamento da fila do Snowpipe e o carregamento real) e o desempenho (ou seja, a latência do carregamento). Para obter mais informações, consulte Carregamentos contínuos de dados (ou seja, Snowpipe) e dimensionamento de arquivos.
Ordem de carregamento dos arquivos de dados¶
Para cada objeto de canal, o Snowflake estabelece uma única fila para sequenciar os arquivos de dados que aguardam carregamento. À medida que novos arquivos de dados são descobertos em um estágio, o Snowpipe os anexa à fila. Entretanto, processos múltiplos puxam os arquivos da fila; assim, enquanto o Snowpipe geralmente carrega arquivos mais antigos primeiro, não há garantia de que os arquivos sejam carregados na mesma ordem em que são preparados.
Duplicação de dados¶
O Snowpipe usa metadados de carregamento de arquivos associados a cada objeto de canal para evitar recarregar os mesmos arquivos (e duplicar dados) em uma tabela. Esses metadados armazenam o caminho (ou seja, o prefixo) e o nome de cada arquivo carregado e impedem o carregamento de arquivos com o mesmo nome, mesmo que tenham sido modificados posteriormente (ou seja, tenham uma eTag diferente).
Estimativa da latência do Snowpipe¶
Dado o número de fatores que podem diferenciar os carregamentos do Snowpipe, é muito difícil para o Snowflake estimar a latência. Formatos e tamanhos de arquivos e a complexidade das instruções COPY (incluindo a instrução SELECT usada para transformações), todos têm impacto na quantidade de tempo necessária para uma carga do Snowpipe.
Sugerimos que você experimente realizando um conjunto típico de carregamentos para estimar a latência média.
Segurança de canal¶
Privilégios de controle de acesso¶
Criação de canais¶
Criar e gerenciar canais requer uma função com um mínimo dos seguintes privilégios:
Objeto |
Privilégio |
Notas |
---|---|---|
Banco de dados |
USAGE |
|
Esquema |
USAGE, CREATE PIPE |
|
Estágio na definição do canal |
USAGE |
Somente estágios externos. |
Estágio na definição do canal |
READ |
Somente estágios internos. |
Tabela na definição do canal |
SELECT, INSERT |
Propriedade de canais¶
Após a criação de um canal, o proprietário do canal (ou seja, a função que tem o privilégio OWNERSHIP sobre o canal) deve ter os seguintes privilégios:
Objeto |
Privilégio |
Notas |
---|---|---|
Banco de dados |
USAGE |
|
Esquema |
USAGE |
|
Canal |
OWNERSHIP |
|
Estágio na definição do canal |
USAGE |
Somente estágios externos. |
Estágio na definição do canal |
READ |
Somente estágios internos. |
Tabela na definição do canal |
SELECT, INSERT |
Pausa ou retomada de canais¶
Além do proprietário do canal, uma função que tem as seguintes permissões mínimas pode pausar ou retomar o canal:
Objeto |
Privilégio |
Notas |
---|---|---|
Banco de dados |
USAGE |
|
Esquema |
USAGE |
|
Canal |
OPERATE |
|
Estágio na definição do canal |
USAGE |
Somente estágios externos. |
Estágio na definição do canal |
READ |
Somente estágios internos. |
Tabela na definição do canal |
SELECT, INSERT |
Snowpipe DDL¶
Para oferecer suporte à criação e ao gerenciamento de canais, o Snowflake fornece o seguinte conjunto de comandos DDL especiais:
Além disso, os provedores podem visualizar, conceder ou revogar o acesso aos objetos de banco de dados necessários para o Snowpipe usando o seguinte DDL de controle de acesso padrão: