Skip to content

Obtendo dados da API REST do Snowflake usando Python: Tutorial completo

Updated on

No mundo do data warehousing, o Snowflake surgiu como uma plataforma líder, oferecendo uma infinidade de conectores compatíveis com padrões da indústria em várias linguagens de programação. Um desses conectores é a API REST do Snowflake, que é agnóstica em relação à linguagem e permite interação perfeita com a plataforma Snowflake. Este artigo tem como objetivo fornecer um guia abrangente sobre como obter dados da API REST do Snowflake usando Python, uma linguagem de programação popular conhecida por sua simplicidade e robustez.

O Python, com seu rico ecossistema de bibliotecas e frameworks, é uma excelente escolha para interagir com a API REST do Snowflake. Seja usando o conector Python, compatível com o PEP 249, ou aproveitando a API REST do Snowpipe para carregamento de dados, o Python oferece uma variedade de possibilidades. Este artigo entrará em detalhes sobre essas interações, fornecendo exemplos práticos e abordando perguntas frequentes.

Deseja visualizar rapidamente dados do Snowflake? Você pode querer dar uma olhada no RATH (opens in a new tab)!

Link do GitHub do RATH: https://github.com/Kanaries/Rath (opens in a new tab)

Imagine poder limpar e importar facilmente seus dados armazenados no Snowflake, e gerar insights com visualização de dados de maneira rápida e eficiente, e realizar análise exploratória de dados sem código complicado. Isso é exatamente para que o RATH foi projetado.

Assista à demonstração a seguir do RATH identificando rapidamente anomalias nos dados com o recurso Data Painter (opens in a new tab):


Interessado? O RATH possui recursos mais avançados! Acesse o site do RATH (opens in a new tab) para obter mais detalhes agora!

Parte 1: Entendendo o Snowflake e a API REST

O Snowflake é uma plataforma de data warehousing baseada em nuvem que oferece uma infinidade de conectores compatíveis com padrões da indústria em cada linguagem de programação. Um desses conectores é a API REST, que é agnóstica em relação a qualquer linguagem de programação. Isso significa que você pode usar qualquer linguagem de programação para interagir com o Snowflake por meio da API REST, tornando-o uma escolha versátil e flexível para desenvolvedores.

A API REST opera enviando solicitações HTTP para o servidor do Snowflake e recebendo respostas HTTP. Essa interação permite executar várias operações, como carregamento de dados, consulta de dados e gerenciamento da sua conta Snowflake. Por exemplo, você pode usar a API REST para autenticar sua sessão, emitir consultas SQL, monitorar o status de suas consultas e recuperar os resultados da consulta.

Parte 2: Usando Python com a API REST do Snowflake

O Python é uma linguagem de programação poderosa amplamente utilizada em análise de dados, aprendizado de máquina, desenvolvimento web e muito mais. Sua simplicidade e legibilidade o tornam uma escolha popular entre os desenvolvedores. Quando se trata de interagir com a API REST do Snowflake, o Python oferece várias vantagens.

Em primeiro lugar, o Python possui um rico ecossistema de bibliotecas que podem simplificar o processo de envio de solicitações HTTP e manipulação de respostas HTTP. Bibliotecas como requests e http.client fornecem funções fáceis de usar para essas tarefas. Em segundo lugar, o suporte do Python para JSON (JavaScript Object Notation) é inestimável ao trabalhar com APIs REST, pois JSON é comumente usado para estruturar dados em solicitações e respostas de API.

No contexto do Snowflake, o Python pode ser usado para enviar consultas SQL para a API REST, lidar com as respostas e manipular os dados retornados. Por exemplo, você pode usar o Python para emitir uma consulta SQL para o Snowflake, recuperar os resultados da consulta no formato JSON e, em seguida, usar a biblioteca json para analisar os dados JSON.

Parte 3: Exemplo prático de uso do Python com a API REST do Snowflake

Vamos examinar um exemplo prático de como você pode usar o Python para interagir com a API REST do Snowflake. Neste exemplo, focaremos no processo de autenticar uma sessão, emitir uma consulta SQL e recuperar os resultados da consulta.

Em primeiro lugar, você precisa autenticar sua sessão enviando uma solicitação POST para o endpoint /session/v1/login-request. O corpo da solicitação deve incluir os detalhes da sua conta e credenciais Snowflake. Se a autenticação for bem-sucedida, você receberá uma resposta contendo um token, que será usado em solicitações subsequentes da API.

Em seguida, você pode emitir uma consulta SQL enviando uma solicitação POST para o endpoint /queries/v1/query-request.

Após emitir a consulta SQL, você receberá uma resposta que inclui o ID da consulta e um indicador de sucesso. O indicador de sucesso indica se o sistema aceitou a consulta, mas não fornece informações sobre o status de execução da consulta.

Para verificar o status da consulta, você pode enviar uma solicitação GET para o endpoint /monitoring/queries/{query-id}, passando o ID da consulta na URL. Se a consulta tiver sido executada com sucesso, você receberá uma resposta indicando que a consulta foi bem-sucedida.

Por fim, para recuperar os resultados da consulta, você pode enviar outra solicitação POST para o endpoint /queries/v1/query-request, desta vez passando o ID da consulta no texto SQL do corpo da solicitação. A resposta conterá os resultados da consulta no campo rowset do objeto data.

Aqui está um exemplo simplificado de como você pode implementar esse processo em Python:

import requests
 
## Autenticar a sessão
auth_url = "https://{conta}.{região}.snowflakecomputing.com/session/v1/login-request?warehouse={armazém}"
auth_data = {
    "data": {
        "CLIENT_APP_ID": "cliente-leve",
        "CLIENT_APP_VERSION": "0.0.1",
        "ACCOUNT_NAME": "...",
        "LOGIN_NAME": "...",
        "PASSWORD": "..."
    }
}
auth_response = requests.post(auth_url, data=json.dumps(auth_data))
token = auth_response.json()["data"]["token"]
 
## Emitir uma consulta SQL
query_url = "https://{conta}.{região}.snowflakecomputing.com/queries/v1/query-request?requestId={uuid-aleatório}"
query_headers = {"Authorization": f"Snowflake Token=\"{token}\""}
query_data = {
    "sqlText": "SELECT * FROM minha_tabela",
    "asyncExec": True,
    "sequenceId": 1,
    "querySubmissionTime": 1635322866647
}
query_response = requests.post(query_url, headers=query_headers, data=json.dumps(query_data))
query_id = query_response.json()["data"]["queryId"]
 
## Verificar o status da consulta
status_url = f"https://{conta}.{região}.snowflakecomputing.com/monitoring/queries/{query_id}"
status_response = requests.get(status_url, headers=query_headers)
status = status_response.json()["data"]["queries"][0]["status"]
 
## Recuperar os resultados da consulta
if status == "SUCCESS":
    results_url = "https://{conta}.{região}.snowflakecomputing.com/queries/v1/query-request?requestId={uuid-aleatório}"
    results_data = {
        "sqlText": f"SELECT * FROM table(result_scan('{query_id}'))",
        "asyncExec": False,
        "sequenceId": 1,
        "querySubmissionTime": 1635066639000
    }
    results_response = requests.post(results_url, headers=query_headers, data=json.dumps(results_data))
    results = results_response.json()["data"]["rowset"]

Este exemplo demonstra o processo básico de interagir com a API REST do Snowflake usando Python. No entanto, tenha em mente que este é um exemplo simplificado e a implementação real pode exigir manipulação de erros adicionais e outras considerações.

Parte 4: Manipulação de Conjuntos de Resultados Grandes

Ao trabalhar com conjuntos de dados grandes, a carga útil retornada da API REST do Snowflake pode não conter nenhuma linha no array rowset. Em vez disso, ele contém chunkHeaders e chunks. Esses chunks são essencialmente objetos criptografados offloaded em S3 que estão prontos para serem baixados. Os objetos têm o mesmo formato JSON do rowset teria.

Aqui está como você pode lidar com conjuntos de resultados grandes em Python:

## Verificar se a resposta contém chunks
if "chunks" in results_response.json()["data"]:
    chunks = results_response.json()["data"]["chunks"]
    chunk_headers = results_response.json()["data"]["chunkHeaders"]
 
    ## Baixar e descriptografar cada chunk
    for chunk in chunks:
        chunk_url = chunk["url"]
        chunk_response = requests.get(chunk_url, headers=chunk_headers)
        chunk_data = chunk_response.json()
 
        ## Processar os dados do chunk
        for row in chunk_data["rowset"]:
            processar_linha(row)

Este código verifica se a resposta contém chunks. Se conter, ele baixa e descriptografa cada chunk e depois processa os dados em cada chunk.

Parte 5: Usando a API REST do Snowpipe para Carregamento de Dados

O Snowpipe é um serviço fornecido pelo Snowflake para carregar dados no seu data warehouse do Snowflake. Ele foi projetado para carregar dados assim que eles chegam no seu armazenamento baseado em nuvem. O Snowpipe usa a API REST do Snowflake, permitindo automatizar o processo de carregamento de dados.

Aqui está um exemplo básico de como você pode usar o Python para interagir com a API REST do Snowpipe:

## Definir a URL da API REST do Snowpipe
snowpipe_url = "https://{conta}.{região}.snowflakecomputing.com/v1/data/pipes/{nome_pipe}/insertFiles"
 
## Definir os cabeçalhos da requisição
headers = {
    "Authorization": f"Snowflake Token=\"{token}\"",
    "Content-Type": "application/json"
}
 
## Definir o corpo da requisição
body = {
    "files": [
        "s3://meu-bucket/meu-arquivo.csv"
    ]
}
 
## Enviar a requisição para a API REST do Snowpipe
response = requests.post(snowpipe_url, headers=headers, data=json.dumps(body))
 
## Verificar a resposta
if response.status_code == 200:
    print("Carregamento de dados iniciado com sucesso.")
else:
    print(f"Falha ao iniciar o carregamento de dados: {response.json()['message']}")

Este código envia uma requisição para a API REST do Snowpipe para iniciar o carregamento de dados de um arquivo especificado no seu bucket do S3. A resposta da API REST do Snowpipe indicará se o processo de carregamento de dados foi iniciado com sucesso.

Conclusão

Em conclusão, obter dados da API REST do Snowflake usando Python é uma maneira poderosa de aproveitar as capacidades do Snowflake e do Python. Seja carregando dados, consultando dados ou gerenciando sua conta do Snowflake, o Python oferece uma maneira robusta e flexível de interagir com a API REST do Snowflake. Com os exemplos práticos e as perguntas frequentes fornecidas neste artigo, você deve ter agora uma compreensão sólida de como começar a usar a API REST do Snowflake e o Python. Boa codificação!

Perguntas frequentes

Como você obtém dados de um Snowflake em Python?

Você pode obter dados de um Snowflake em Python usando o Conector Python do Snowflake ou a API REST do Snowflake. O Conector Python permite que você interaja com o Snowflake usando a especificação da API de banco de dados do Python (PEP 249), enquanto a API REST permite que você envie solicitações HTTP para realizar várias operações no Snowflake.

O Snowflake pode obter dados de uma API?

Sim, o Snowflake pode obter dados de APIs usando funções externas. Essas funções permitem que o Snowflake chame uma API externa e recupere dados durante uma consulta. Além disso, você pode usar a API REST do Snowflake para interagir com sua conta do Snowflake e realizar operações como carregamento de dados e consulta de dados.

O que é a conexão da API do Snowflake em Python?

A conexão da API Snowflake em Python se refere à conexão estabelecida entre sua aplicação Python e o Snowflake usando o Conector Python Snowflake ou a API REST do Snowflake. Essa conexão permite que sua aplicação Python interaja com o Snowflake, possibilitando operações como carregamento de dados, consulta de dados e gerenciamento de conta.