Daten aus der Snowflake REST API mit Python abrufen: Komplettes Tutorial
Published on
In der Welt des Data Warehousing hat sich Snowflake als führende Plattform etabliert und bietet eine Vielzahl von Konnektoren, die mit Industriestandards in verschiedenen Programmiersprachen kompatibel sind. Einer dieser Konnektoren ist die Snowflake REST API, die sprachunabhängig ist und eine nahtlose Interaktion mit der Snowflake-Plattform ermöglicht. Dieser Artikel soll einen umfassenden Leitfaden zum Abrufen von Daten aus der Snowflake REST API mit Python bieten, einer populären Programmiersprache, die für ihre Einfachheit und Robustheit bekannt ist.
Python ist mit seinem umfangreichen Ökosystem an Bibliotheken und Frameworks eine ausgezeichnete Wahl für die Interaktion mit der Snowflake REST API. Egal, ob Sie den Python-Konnektor verwenden, der mit dem PEP 249 kompatibel ist, oder die Snowpipe REST API für die Dateneingabe nutzen, Python bietet eine Vielzahl von Möglichkeiten. Dieser Artikel geht auf die Details dieser Interaktionen ein, liefert praktische Beispiele und behandelt häufig gestellte Fragen.
Möchten Sie schnell Snowflake-Daten visualisieren (opens in a new tab)? Dann sollten Sie sich RATH (opens in a new tab) genauer ansehen!
RATH GitHub-Link: https://github.com/Kanaries/Rath (opens in a new tab)
Stellen Sie sich vor, Sie könnten Ihre in Snowflake gespeicherten Daten problemlos bereinigen und importieren und schnell und effizient Dateninsights mit Visualisierungen generieren sowie explorative Datenanalysen ohne komplizierte Codierung durchführen. Genau dafür ist RATH konzipiert.
Sehen Sie sich die folgende Demo von RATH an, bei der mit der Funktion Data Painter (opens in a new tab) schnell Anomalien in Daten identifiziert werden:
Interessiert? RATH hat noch mehr fortschrittliche Funktionen! Schauen Sie jetzt auf der RATH-Website (opens in a new tab) vorbei, um weitere Details zu erfahren!
Teil 1: Snowflake und REST API verstehen
Snowflake ist eine Cloud-basierte Data Warehousing-Plattform, die eine Vielzahl von Konnektoren bietet, die in jeder Programmiersprache mit Industriestandards kompatibel sind. Einer dieser Konnektoren ist die REST API, die unabhängig von einer bestimmten Programmiersprache ist. Das bedeutet, dass Sie jede beliebige Programmiersprache verwenden können, um über die REST API mit Snowflake zu interagieren, was sie zu einer vielseitigen und flexiblen Wahl für Entwickler macht.
Die REST API funktioniert, indem sie HTTP-Anfragen an den Snowflake-Server sendet und HTTP-Antworten empfängt. Diese Interaktion ermöglicht verschiedene Operationen wie das Laden von Daten, das Abfragen von Daten und das Verwalten Ihres Snowflake-Kontos. Sie können beispielsweise die REST API verwenden, um Ihre Sitzung zu authentifizieren, SQL-Abfragen auszuführen, den Status Ihrer Abfragen zu überwachen und Abfrageergebnisse abzurufen.
Teil 2: Verwendung von Python mit der Snowflake REST API
Python ist eine leistungsstarke Programmiersprache, die weit verbreitet in der Datenanalyse, im maschinellen Lernen, in der Webentwicklung und mehr verwendet wird. Ihre Einfachheit und Lesbarkeit machen sie bei Entwicklern beliebt. Wenn es um die Interaktion mit der Snowflake REST API geht, bietet Python mehrere Vorteile.
Erstens verfügt Python über ein umfangreiches Ökosystem von Bibliotheken, die den Prozess des Sendens von HTTP-Anfragen und des Umgangs mit HTTP-Antworten vereinfachen können. Bibliotheken wie requests
und http.client
bieten einfach zu verwendende Funktionen für diese Aufgaben. Zweitens ist die Unterstützung von JSON (JavaScript Object Notation) in Python von unschätzbarem Wert bei der Arbeit mit REST APIs, da JSON häufig zur Strukturierung von Daten in API-Anfragen und -Antworten verwendet wird.
Im Kontext von Snowflake kann Python verwendet werden, um SQL-Abfragen an die REST API zu senden, die Antworten zu verarbeiten und die zurückgegebenen Daten zu manipulieren. Sie können beispielsweise Python verwenden, um eine SQL-Abfrage an Snowflake zu senden, die Abfrageergebnisse im JSON-Format abzurufen und dann die json
-Bibliothek verwenden, um die JSON-Daten zu analysieren.
Teil 3: Praktisches Beispiel für die Verwendung von Python mit der Snowflake REST API
Lassen Sie uns ein praktisches Beispiel betrachten, wie Sie Python verwenden können, um mit der Snowflake REST API zu interagieren. In diesem Beispiel konzentrieren wir uns auf den Prozess der Authentifizierung einer Sitzung, dem Ausführen einer SQL-Abfrage und dem Abrufen der Abfrageergebnisse.
Zunächst müssen Sie Ihre Sitzung authentifizieren, indem Sie eine POST-Anfrage an den Endpunkt /session/v1/login-request
senden. Der Anfragekörper sollte Ihre Snowflake-Kontodaten und Anmeldeinformationen enthalten. Wenn die Authentifizierung erfolgreich ist, erhalten Sie eine Antwort mit einem Token, das Sie für nachfolgende API-Anfragen verwenden.
Danach können Sie eine SQL-Abfrage senden, indem Sie eine POST-Anfrage an den Endpunkt /queries/v1/query-request
senden.
Nach dem Senden der SQL-Abfrage erhalten Sie eine Antwort, die die Abfrage-ID und einen Erfolgsindikator enthält. Der Erfolgsindikator gibt an, ob das System die Abfrage akzeptiert hat, liefert jedoch keine Informationen zum Ausführungsstatus der Abfrage.
Um den Status der Abfrage zu überprüfen, senden Sie eine GET-Anfrage an den Endpunkt /monitoring/queries/{query-id}
, wobei Sie die Abfrage-ID in der URL übergeben. Wenn die Abfrage erfolgreich ausgeführt wurde, erhalten Sie eine Antwort, die darauf hinweist, dass die Abfrage erfolgreich war.
Schließlich können Sie die Ergebnisse der Abfrage abrufen, indem Sie erneut eine POST-Anfrage an den Endpunkt /queries/v1/query-request
senden und diesmal die Abfrage-ID im SQL-Text des Anfragekörpers übergeben. Die Antwort enthält die Abfrageergebnisse im rowset
-Feld des data
-Objekts.
Hier ist ein vereinfachtes Beispiel, wie Sie diesen Prozess in Python implementieren könnten:
import requests
import json
## Sitzung authentifizieren
auth_url = "https://{account}.{region}.snowflakecomputing.com/session/v1/login-request?warehouse={warehouse}"
auth_data = {
"data": {
"CLIENT_APP_ID": "leichtgewichtiger-client",
"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"]
## Eine SQL-Abfrage ausführen
query_url = "https://{account}.{region}.snowflakecomputing.com/queries/v1/query-request?requestId={random-uuid}"
query_headers = {"Authorization": f"Snowflake Token=\"{token}\""}
query_data = {
"sqlText": "SELECT * FROM meine_tabelle",
"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"]
## Den Status der Abfrage überprüfen
status_url = f"https://{account}.{region}.snowflakecomputing.com/monitoring/queries/{query_id}"
status_response = requests.get(status_url, headers=query_headers)
status = status_response.json()["data"]["queries"][0]["status"]
## Die Abfrageergebnisse abrufen
if status == "SUCCESS":
results_url = "https://{account}.{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"]
Dieses Beispiel zeigt den grundlegenden Prozess der Interaktion mit der Snowflake-REST-API mithilfe von Python. Beachten Sie jedoch, dass es sich hierbei um ein vereinfachtes Beispiel handelt und die tatsächliche Implementierung möglicherweise zusätzliche Fehlerbehandlung und andere Überlegungen erfordert.
Teil 4: Verarbeitung großer Ergebnismengen
Bei der Arbeit mit großen Datensätzen enthält die vom Snowflake-REST-API zurückgegebene Nutzlast möglicherweise keine Zeilen im rowset
-Array. Stattdessen enthält es chunkHeaders
und chunks
. Diese Chunks sind im Wesentlichen S3-offgeladene verschlüsselte Objekte, die zum Herunterladen bereit sind. Die Objekte haben das gleiche JSON-Format wie das rowset
hätte.
So können Sie in Python mit großen Ergebnismengen umgehen:
## Überprüfen, ob die Antwort Chunks enthält
if "chunks" in results_response.json()["data"]:
chunks = results_response.json()["data"]["chunks"]
chunk_headers = results_response.json()["data"]["chunkHeaders"]
## Jeden Chunk herunterladen und entschlüsseln
for chunk in chunks:
chunk_url = chunk["url"]
chunk_response = requests.get(chunk_url, headers=chunk_headers)
chunk_data = chunk_response.json()
## Die Chunk-Daten verarbeiten
for row in chunk_data["rowset"]:
process_row(row)
Dieser Code überprüft, ob die Antwort Chunks enthält. Wenn dies der Fall ist, lädt er jeden Chunk herunter und entschlüsselt ihn, und verarbeitet dann die Daten in jedem Chunk.
Teil 5: Verwendung der Snowpipe REST-API zum Laden von Daten
Snowpipe ist ein von Snowflake bereitgestellter Dienst zum Laden von Daten in Ihr Snowflake-Datenlager. Es ist darauf ausgelegt, Daten sofort zu laden, sobald sie in Ihrem cloudbasierten Speicher eintreffen. Snowpipe verwendet die Snowflake-REST-API, mit der Sie den Prozess des Datenladens automatisieren können.
Hier ist ein grundlegendes Beispiel, wie Sie Python verwenden können, um mit der Snowpipe REST-API zu interagieren:
## Die URL der Snowpipe REST-API definieren
snowpipe_url = "https://{account}.{region}.snowflakecomputing.com/v1/data/pipes/{pipe_name}/insertFiles"
## Die Anforderungsheader definieren
headers = {
"Authorization": f"Snowflake Token=\"{token}\"",
"Content-Type": "application/json"
}
## Den Anforderungstext definieren
body = {
"files": [
"s3://my-bucket/my-file.csv"
]
}
## Die Anfrage an die Snowpipe REST-API senden
response = requests.post(snowpipe_url, headers=headers, data=json.dumps(body))
## Die Antwort überprüfen
if response.status_code == 200:
print("Datenauftrag erfolgreich gestartet.")
else:
print(f"Fehler beim Starten des Datenauftrags: {response.json()['message']}")
Dieser Code sendet eine Anfrage an die Snowpipe REST-API, um Daten aus einer angegebenen Datei in Ihrem S3-Bucket zu laden. Die Antwort von der Snowpipe REST-API gibt an, ob der Datenauftragsprozess erfolgreich gestartet wurde.
Fazit
Zusammenfassend bietet die Verwendung von Python zum Abrufen von Daten aus der Snowflake REST-API eine leistungsstarke Möglichkeit, die Funktionen von Snowflake und Python zu nutzen. Egal, ob Sie Daten laden, Daten abfragen oder Ihr Snowflake-Konto verwalten möchten, Python bietet eine robuste und flexible Möglichkeit zur Interaktion mit der Snowflake-REST-API. Mit den praktischen Beispielen und FAQs, die in diesem Artikel bereitgestellt werden, sollten Sie nun ein solides Verständnis dafür haben, wie Sie mit der Snowflake REST-API und Python beginnen können. Viel Spaß beim Programmieren!
FAQs
Wie greifen Sie in Python auf Daten von Snowflake zu?
Sie können mit Hilfe des Snowflake Python Connectors oder der Snowflake REST-API Daten von Snowflake in Python abrufen. Der Python-Connector ermöglicht es Ihnen, mit Snowflake mithilfe der Python Database API-Spezifikation (PEP 249) zu interagieren, während die REST-API es Ihnen ermöglicht, HTTP-Anfragen zu senden, um verschiedene Operationen auf Snowflake durchzuführen.
Kann Snowflake Daten von einer API abrufen?
Ja, Snowflake kann Daten von APIs mithilfe externer Funktionen abrufen. Diese Funktionen ermöglichen es Snowflake, auf eine externe API zuzugreifen und Daten während einer Abfrage abzurufen. Zusätzlich können Sie die Snowflake REST-API verwenden, um mit Ihrem Snowflake-Konto zu interagieren und Operationen wie das Laden von Daten und das Abfragen von Daten durchzuführen.
Was ist die Snowflake API-Verbindung in Python?
Die Snowflake API-Verbindung in Python bezieht sich auf die Verbindung, die zwischen Ihrer Python-Anwendung und Snowflake mit Hilfe des Snowflake Python Connectors oder der Snowflake REST API hergestellt wurde. Diese Verbindung ermöglicht es Ihrer Python-Anwendung, mit Snowflake zu interagieren und Operationen wie das Laden von Daten, das Abrufen von Daten und das Verwalten von Konten durchzuführen.