Snowflake na prática

No meu artigo anterior abordei em detalhes a plataforma Snowflake e a arquitetura da solução. Agora irei apresentar alguns exemplos de uso com um case prático de análise de dados das bicicletas de compartilhamento do Citibike. A figura 1 abaixo exemplifica o que foi executado:

Figura 1 – Exemplo usado no Hands-on

Antes de iniciar o hands-on, segue abaixo uma visão de como é o ambiente da Snowflake

Figura 2 – Ambiente do Snowflake

Começa com a criação de um Database para receber os dados

Então, criou-se um “Virtual Warehouse” de forma simples e como se estivesse executando uma query DDL. Nesse caso foi criado um cluster escalável com 2 nós.

Após a criação do cluster para processamento, pode-se verificar as configurações clicando no botão Warehouses, conforme Figura 3. Nesse local também é possível modificar as configurações, criar novos e apagar clusters além de processos via linha de comando como o executado acima.

Figura 3 – Exemplo de “Virtual Warehouse”

Criando Tabela e carregando dados

Agora, nesta etapa precisou-se definir o cluster e o database que serão usados e na sequência foi realizada a criação dos metadados (tabela) que representarão a origem:

Então, criou-se uma “stage” (área temporária de dados) que aponta para um armazenamento externo, no caso nossa origem de dados:

Aqui pode-se ver a lista dos arquivos externos:

Conforme a Figura 4, pode-se observar que a tabela foi criada no banco de dados sem nenhuma linha, a STAGE foi criada dentro do mesmo database sem ser é exibida na hierarquia à esquerda e após executar o comando “list” pode-se ver a lista de arquivos existentes na STAGE.

Figura 4 – Stage

Após executa-se a query abaixo para avaliar o tamanho da stage.

Neste exemplo teve o seguinte volume:

Agora criou-se um arquivo em formato CSV com todos os dados da STAGE, os 376 arquivos e 1.8GB.

Então validou-se os dados na STAGE, para ter certeza de que estão em conformidade com o formato de arquivo que foi definido:

Figura 5 – Arquivo CSV gerado com os arquivos da Stage

Agora copiou-se os dados do CSV para a tabela criada inicialmente. O processo levou 30,44 segundos e gerou 61.468.359 de linhas e 1,6 GB. Informando um status do que foi importado de cada arquivo da Stage.

Figura 6 – Importando dados da Stage para o Database

A fim de teste de performance foi limpa a tabela, redimensionado o cluster e reprocessada a inserção na tabela. O processo de limpeza e redimensionamento é instantâneo, já o processo de carga executou em 10,62 segundos ou quase 3x mais rápido.

Depois da carga o cluster foi redimensionado para o menor tamanho:

A proxima parte do Hands-on envolveu a demonstração de uso de cache de dados. Para esse teste foi executada a query abaixo 2 vezes. A primeira vez teve duração de 4,96 segundos e a segunda vez 75 ms. O volume retornado foi de 44.295 linhas.

Clonando Ambientes

A próxima demonstração envolveu a clonagem de ambientes. De acordo com o explicado, é possível clonar tabelas, schemas e databases. Esse processo foi muito rápido, em menos de 3 segundos o clone estava pronto.

Figura 7 – Clonando uma Tabela e um Database

Trabalhando com JSON

Nessa demonstração foi criado um database com uma tabela com uma coluna do tipo variant:

Figura 8 – Criando objeto para trabalhar com JSON

Depois foi criada uma Stage externa com 61 arquivos JSON

Figura 9 – Criando objeto para trabalhar com JSON

E esses foram copiados para a tabela especificando o tipo de dados. Uma vez carregados os dados, pode-se observar que eles totalizaram 57.894 linhas e 1,2 MB.

Figura 10 – Carregando arquivos JSON

Desse volume de dados foram selecionadas algumas informações e persistidas como uma view dentro do database.

Por fim, eles cruzaram os dados carregados via CSV com os dados via JSON para apresentar a quantidade de viagem e cada uma das condições climáticas.

Figura 11- Cruzando dados de JSON e CSV

Proteção de Dados

Outra feature da solução que foi apresentada tem relação com a restauração de um objeto que foi removido. Para isso os seguintes comandos foram executados:

Viagem no Tempo (Time Travel)

O próximo recurso apresentado foi o Time Travel, que tem por objetivo representar as mudanças que os registros sofrem ao longo do tempo, bem como navegar entre elas. Para essa apresentação primeiramente foram atualizadas todas as linhas com o campo que representa a estação de partida da viagem (start_station_name) como ‘oops’.

Figura 12 – Depois de ter alterado o start_station_name

Agora todas as viagens estão com estação de partida como ‘oops’. Então com base no ID da query executada armazenado no histórico do Snowflake eles definem que o atributo query_id é outro:

Uma vez o query_id ser redefinido a tabela pode ser recriada.

Com a tabela recriada os pontos de partida retornaram.

Figura 13 – Depois de ter retornado ao status inicial

Ainda existem muitas outras funções a serem exploradas na Snowflake que não foram abordadas, como por exemplo o Histórico de execuções, Compartilhamento de databases, Data Marketplace entre outros. A meu ver existem muitos recursos interessantes na solução e o fato de tratar tudo como SQL-like aproxima e empodera os usuários que dominam a linguagem de consulta SQL. Por vezes lembra o Databricks com as configurações do cluster e outras vezes um cliente para consultas em banco de dados com a estrutura hierárquica de objetos à esquerda e os comandos SQL ao centro. Outros dois fatores positivos são de ser multi-cloud e também de faturar apenas por uso de servidor e de armazenamento de forma separada. Porém a necessidade de ser uma solução server para a execução de todos os comandos diminui um pouco da minha empolgação com as possibilidades. Mas reforço que se precisa explorar mais a plataforma para ter certeza do que mais de diferente e/ou melhor que as demais soluções podem ser feito nela.

Gostou da solução? Nós podemos ajudar!

Conheça nossos conteúdos gratuitos, direcionados aos assuntos de sua preferência!

Enviar

Receba nosso conteúdo

Gostaria de receber de forma gratuita mais conteúdos sobre este ou outros assuntos? Preencha o formulário abaixo e receba nosso conteúdo gratuito!

Parabéns!

Você receberá nosso conteúdo em breve!

Atenção

Tivemos um problema com seu formulário, tente novamente.