Récupérer des données de l'API REST Snowflake en utilisant Python : Tutoriel complet
Published on
Dans le domaine de l'informatique décisionnelle, Snowflake s'est imposé comme une plateforme leader, offrant une multitude de connecteurs compatibles avec les normes de l'industrie dans différents langages de programmation. L'un de ces connecteurs est l'API REST Snowflake, qui est indépendante du langage et permet une interaction transparente avec la plateforme Snowflake. Cet article vise à fournir un guide complet sur l'obtention de données à partir de l'API REST Snowflake en utilisant Python, un langage de programmation populaire reconnu pour sa simplicité et sa fiabilité.
Python, avec son écosystème riche en bibliothèques et en frameworks, est un excellent choix pour interagir avec l'API REST Snowflake. Que vous utilisiez le connecteur Python, compatible avec PEP 249, ou que vous exploitez l'API REST Snowpipe pour le chargement des données, Python offre une gamme de possibilités. Cet article approfondira les détails de ces interactions, en fournissant des exemples pratiques et en répondant aux questions fréquemment posées.
Vous souhaitez Visualiser les données de Snowflake (opens in a new tab) rapidement ? Vous voudrez peut-être jeter un coup d'œil à RATH (opens in a new tab) !
Lien GitHub de RATH : https://github.com/Kanaries/Rath (opens in a new tab)
Imaginez que vous puissiez facilement nettoyer et importer vos données stockées dans Snowflake, générer rapidement et efficacement des informations sur les données avec des visualisations, et effectuer une analyse exploratoire des données sans codage compliqué. C'est exactement ce pour quoi RATH a été conçu.
Regardez la démo suivante de RATH identifiant rapidement les anomalies dans les données avec la fonction Data Painter (opens in a new tab) :
Intéressé ? RATH dispose de fonctionnalités avancées qui déchirent ! Consultez dès maintenant le site web de RATH (opens in a new tab) pour plus de détails !
Partie 1 : Comprendre Snowflake et l'API REST
Snowflake est une plateforme de data warehousing basée sur le cloud qui offre une multitude de connecteurs compatibles avec les normes de l'industrie dans chaque langage de programmation. L'un de ces connecteurs est l'API REST, qui est indépendante de tout langage de programmation. Cela signifie que vous pouvez utiliser n'importe quel langage de programmation pour interagir avec Snowflake via l'API REST, ce qui en fait un choix polyvalent et flexible pour les développeurs.
L'API REST fonctionne en envoyant des requêtes HTTP au serveur Snowflake et en recevant des réponses HTTP. Cette interaction vous permet d'effectuer différentes opérations, telles que le chargement de données, la requête de données et la gestion de votre compte Snowflake. Par exemple, vous pouvez utiliser l'API REST pour authentifier votre session, émettre des requêtes SQL, surveiller l'état de vos requêtes et récupérer les résultats des requêtes.
Partie 2 : Utilisation de Python avec l'API REST Snowflake
Python est un langage de programmation puissant largement utilisé dans l'analyse de données, l'apprentissage automatique, le développement web, etc. Sa simplicité et sa lisibilité en font un choix populaire parmi les développeurs. Lorsqu'il s'agit d'interagir avec l'API REST Snowflake, Python présente plusieurs avantages.
Tout d'abord, Python dispose d'un écosystème riche en bibliothèques qui peuvent simplifier le processus d'envoi de requêtes HTTP et de traitement des réponses HTTP. Des bibliothèques comme requests
et http.client
fournissent des fonctions faciles à utiliser pour ces tâches. Deuxièmement, le support de Python pour JSON (JavaScript Object Notation) est inestimable lorsqu'il s'agit de travailler avec des API REST, car JSON est couramment utilisé pour structurer les données dans les requêtes et les réponses d'API.
Dans le contexte de Snowflake, Python peut être utilisé pour envoyer des requêtes SQL à l'API REST, traiter les réponses et manipuler les données renvoyées. Par exemple, vous pouvez utiliser Python pour envoyer une requête SQL à Snowflake, récupérer les résultats de la requête au format JSON, puis utiliser la bibliothèque json
pour analyser les données JSON.
Partie 3 : Exemple pratique d'utilisation de Python avec l'API REST Snowflake
Plongeons dans un exemple pratique de la façon dont vous pouvez utiliser Python pour interagir avec l'API REST Snowflake. Dans cet exemple, nous nous concentrerons sur le processus d'authentification d'une session, d'émission d'une requête SQL et de récupération des résultats de la requête.
Tout d'abord, vous devez authentifier votre session en envoyant une requête POST à l'endpoint /session/v1/login-request
. Le corps de la requête doit inclure les informations de votre compte Snowflake et vos identifiants. Si l'authentification est réussie, vous recevrez une réponse contenant un jeton, que vous utiliserez dans les requêtes d'API ultérieures.
Ensuite, vous pouvez émettre une requête SQL en envoyant une requête POST à l'endpoint /queries/v1/query-request
.
Après avoir émis la requête SQL, vous recevrez une réponse qui inclut l'identifiant de la requête et un indicateur de réussite. L'indicateur de réussite indique si le système a accepté la requête, mais il ne fournit pas d'informations sur l'état d'exécution de la requête.
Pour vérifier l'état de la requête, vous pouvez envoyer une requête GET à l'endpoint /monitoring/queries/{query-id}
, en passant l'identifiant de la requête dans l'URL. Si la requête a été exécutée avec succès, vous recevrez une réponse indiquant que la requête a réussi.
Enfin, pour récupérer les résultats de la requête, vous pouvez envoyer une autre requête POST à l'endpoint /queries/v1/query-request
, en passant cette fois-ci l'identifiant de la requête dans le texte SQL du corps de la requête. La réponse contiendra les résultats de la requête dans le champ rowset
de l'objet data
.
Voici un exemple simplifié de la façon dont vous pourriez implémenter ce processus en Python :
import requests
import json
## Authentifiez la session
auth_url = "https://{compte}.{region}.snowflakecomputing.com/session/v1/login-request?warehouse={entrepôt}"
auth_data = {
"data": {
"CLIENT_APP_ID": "client-léger",
"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"]
## Effectuez une requête SQL
query_url = "https://{compte}.{region}.snowflakecomputing.com/queries/v1/query-request?requestId={random-uuid}"
query_headers = {"Authorization": f"Snowflake Token=\"{token}\""}
query_data = {
"sqlText": "SELECT * FROM my_table",
"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"]
## Vérifiez l'état de la requête
status_url = f"https://{compte}.{region}.snowflakecomputing.com/monitoring/queries/{query_id}"
status_response = requests.get(status_url, headers=query_headers)
status = status_response.json()["data"]["queries"][0]["status"]
## Récupérez les résultats de la requête
if status == "SUCCESS":
results_url = "https://{compte}.{region}.snowflakecomputing.com/queries/v1/query-request?requestId={random-uuid}"
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"]
Cette exemple démontre le processus de base d'interaction avec l'API REST de Snowflake en utilisant Python. Cependant, gardez à l'esprit qu'il s'agit d'un exemple simplifié et que la mise en œuvre réelle peut nécessiter une gestion des erreurs supplémentaire et d'autres considérations.
Partie 4 : Gestion des grands ensembles de résultats
Lorsque vous travaillez avec de grands ensembles de données, la charge utile renvoyée par l'API REST de Snowflake peut ne contenir aucune ligne dans le tableau rowset
. À la place, elle contient des chunkHeaders
et des chunks
. Ces chunks sont essentiellement des objets chiffrés déchargés dans S3 prêts à être téléchargés. Les objets ont le même format JSON que celui que rowset
aurait.
Voici comment vous pouvez gérer de grands ensembles de résultats en Python :
## Vérifiez si la réponse contient des chunks
if "chunks" in results_response.json()["data"]:
chunks = results_response.json()["data"]["chunks"]
chunk_headers = results_response.json()["data"]["chunkHeaders"]
## Téléchargez et déchiffrez chaque chunk
for chunk in chunks:
chunk_url = chunk["url"]
chunk_response = requests.get(chunk_url, headers=chunk_headers)
chunk_data = chunk_response.json()
## Traitez les données du chunk
for row in chunk_data["rowset"]:
process_row(row)
Ce code vérifie si la réponse contient des chunks. Si c'est le cas, il télécharge et déchiffre chaque chunk, puis traite les données de chaque chunk.
Partie 5 : Utilisation de l'API REST de Snowpipe pour le chargement de données
Snowpipe est un service fourni par Snowflake pour charger des données dans votre entrepôt de données Snowflake. Il est conçu pour charger les données dès leur arrivée dans votre stockage basé sur le cloud. Snowpipe utilise l'API REST de Snowflake, ce qui vous permet d'automatiser le processus de chargement des données.
Voici un exemple basique de la façon dont vous pouvez utiliser Python pour interagir avec l'API REST de Snowpipe :
## Définissez l'URL de l'API REST de Snowpipe
snowpipe_url = "https://{compte}.{region}.snowflakecomputing.com/v1/data/pipes/{pipe_name}/insertFiles"
## Définissez les en-têtes de la requête
headers = {
"Authorization": f"Snowflake Token=\"{token}\"",
"Content-Type": "application/json"
}
## Définissez le corps de la requête
body = {
"files": [
"s3://my-bucket/my-file.csv"
]
}
## Envoyez la requête à l'API REST de Snowpipe
response = requests.post(snowpipe_url, headers=headers, data=json.dumps(body))
## Vérifiez la réponse
if response.status_code == 200:
print("Chargement des données démarré avec succès.")
else:
print(f"Échec du démarrage du chargement des données : {response.json()['message']}")
Ce code envoie une requête à l'API REST de Snowpipe pour commencer le chargement des données à partir d'un fichier spécifié dans votre bucket S3. La réponse de l'API REST de Snowpipe indiquera si le processus de chargement des données a démarré avec succès.
Conclusion
En conclusion, récupérer des données depuis l'API REST de Snowflake en utilisant Python est un moyen puissant de tirer parti des fonctionnalités de Snowflake et de Python. Que vous chargiez des données, consultiez des données ou gériez votre compte Snowflake, Python offre un moyen robuste et flexible d'interagir avec l'API REST de Snowflake. Avec les exemples pratiques et les FAQ fournis dans cet article, vous devriez maintenant avoir une compréhension solide de la façon de commencer avec l'API REST de Snowflake et Python. Bon codage !
FAQ
Comment extraire des données d'un Snowflake en Python ?
Vous pouvez extraire des données de Snowflake en Python en utilisant le connecteur Python de Snowflake ou l'API REST de Snowflake. Le connecteur Python vous permet d'interagir avec Snowflake en utilisant la spécification de l'API de base de données de Python (PEP 249), tandis que l'API REST vous permet d'envoyer des requêtes HTTP pour effectuer diverses opérations sur Snowflake.
Est-ce que Snowflake peut extraire des données d'une API ?
Oui, Snowflake peut extraire des données à partir d'APIs en utilisant des fonctions externes. Ces fonctions permettent à Snowflake d'appeler une API externe et de récupérer des données pendant une requête. De plus, vous pouvez utiliser l'API REST de Snowflake pour interagir avec votre compte Snowflake et effectuer des opérations telles que le chargement de données et la consultation de données.
Quelle est la connexion à l'API de Snowflake en Python ?
La connection à l'API Snowflake en Python fait référence à la connexion établie entre votre application Python et Snowflake en utilisant le connecteur Python Snowflake ou l'API REST Snowflake. Cette connexion permet à votre application Python d'interagir avec Snowflake, permettant des opérations telles que le chargement de données, l'interrogation de données et la gestion du compte.