Verwenden von pandas-DataFrames mit dem Python-Konnektor¶
pandas ist eine Bibliothek zur Datenanalyse. Bei pandas verwenden Sie eine Datenstruktur namens DataFrame, um zweidimensionale Daten (z. B. Daten aus einer Datenbanktabelle) zu analysieren und zu bearbeiten.
Wenn Sie Daten aus einer Snowflake-Datenbank in einen pandas-DataFrame übertragen müssen, können Sie die mit dem Snowflake-Konnektor für Python bereitgestellten API-Methoden verwenden. Der Konnektor bietet auch API-Methoden zum Schreiben von Daten von einem pandas-DataFrame in eine Snowflake-Datenbank.
Bemerkung
Einige dieser API-Methoden erfordern eine bestimmte Version der PyArrow-Bibliothek. Weitere Informationen dazu finden Sie unter Anforderungen.
Unter diesem Thema:
Anforderungen¶
Derzeit verwenden die pandas-orientierten API-Methoden der Python-Konnektor-API Folgendes:
Snowflake-Konnektor 2.1.2 (oder höher) für Python.
PyArrow-Bibliothek Version 3.0.x.
Wenn PyArrow bei Ihnen nicht installiert ist, müssen Sie PyArrow nicht installieren. Wenn Sie den Python-Konnektor wie unten dokumentiert installieren, wird automatisch die entsprechende Version von PyArrow installiert.
Vorsicht
Wenn Sie bereits eine andere Version der PyArrow-Bibliothek als die oben aufgeführte empfohlene Version haben, deinstallieren Sie PyArrow, bevor Sie den Snowflake-Konnektor für Python installieren. Führen Sie nach der Installation des Snowflake -Konnektor für Python keine Neuinstallation einer anderen Version von PyArrow durch.
pandas 0.25.2 (oder höher). Frühere Versionen funktionieren möglicherweise, wurden jedoch nicht getestet.
Installation¶
Führen Sie den folgenden Befehl aus, um die pandas-kompatible Version des Snowflake-Konnektor für Python zu installieren:
pip install "snowflake-connector-python[pandas]"
Sie müssen die eckigen Klammern ([
und ]
) wie im Befehl angegeben eingeben. Die eckigen Klammern geben den zusätzlichen Teil des Pakets an, der installiert werden soll.
Schließen Sie den Namen des Pakets in Anführungszeichen ein (wie gezeigt), um zu verhindern, dass die eckigen Klammern als Platzhalter interpretiert werden.
Wenn Sie weitere Zusätze installieren müssen (z. B. secure-local-storage
für Zwischenspeichern von Verbindungen mit browserbasiertem SSO oder MFA-Tokencaching), verwenden Sie ein Komma zwischen den Zusätzen:
pip install "snowflake-connector-python[secure-local-storage,pandas]"
Lesen von Daten aus einer Snowflake-Datenbank in einen pandas-DataFrame¶
Um Daten in einen pandas-DataFrame einzulesen, verwenden Sie einen Cursor, um Daten abzurufen und dann mithilfe einer der Cursor
-Methoden die Daten in einen pandas-DataFrame zu übertragen:
fetch_pandas_chargen()
.
Schreiben von Daten von einem pandas-DataFrame in eine Snowflake-Datenbank¶
Führen Sie eine der folgenden Aktionen aus, um Daten von einem pandas-DataFrame in eine Snowflake-Datenbank zu schreiben:
Rufen Sie die Funktion
write_pandas()
auf.Rufen Sie die Methode
pandas.DataFrame.to_sql()
(siehe pandas-Dokumentation) auf, und geben Siepd_writer()
als Methode zum Einfügen der Daten in die Datenbank an.
Datenzuordnung zwischen Snowflake und pandas¶
Die folgende Tabelle zeigt die Zuordnung von Snowflake-Datentypen zu pandas-Datentypen:
Snowflake-Datentyp |
pandas-Datentyp |
---|---|
FIXED NUMERIC-Typ (Skalierung = 0) außer DECIMAL |
|
FIXED NUMERIC-Typ (Skalierung > 0) außer DECIMAL |
|
FIXED NUMERIC-Typ DECIMAL |
|
FLOAT/DOUBLE |
|
VARCHAR |
|
BINARY |
|
VARIANT |
|
DATE |
|
TIME |
|
TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ |
|
Anmerkungen
Wenn der Snowflake-Datentyp FIXED NUMERIC und die Skalierung null und der Wert NULL ist, wird der Wert nicht in einen ganzzahligen Typ, sondern in
float64
konvertiert.Wenn eine Konvertierung einen Überlauf verursacht, löst der Python-Konnektor eine Ausnahme aus.
Importieren von pandas¶
Üblicherweise wird pandas mit der folgenden Anweisung importiert:
import pandas as pd
Möglicherweise werden Verweise auf pandas-Objekte als pandas.object
oder pd.object
angezeigt.
Migration zu pandas-DataFrames¶
Dieser Abschnitt richtet sich hauptsächlich an Benutzer, die zuvor pandas (und möglicherweise SQLAlchemy) verwendet haben.
Frühere pandas-Benutzer haben möglicherweise Code wie dem folgenden:
Das folgende Beispiel zeigt die ursprüngliche Methode zum Generieren eines pandas-DataFrame aus dem Python-Konnektor:
import pandas as pd def fetch_pandas_old(cur, sql): cur.execute(sql) rows = 0 while True: dat = cur.fetchmany(50000) if not dat: break df = pd.DataFrame(dat, columns=cur.description) rows += df.shape[0] print(rows)
Das folgende Beispiel zeigt, wie Sie mit SQLAlchemy einen pandas-DataFrame generieren:
import pandas as pd def fetch_pandas_sqlalchemy(sql): rows = 0 for chunk in pd.read_sql_query(sql, engine, chunksize=50000): rows += chunk.shape[0] print(rows)
Code, der einem der vorhergehenden Beispiele ähnelt, kann konvertiert werden, um die unter Lesen von Daten aus einer Snowflake-Datenbank in einen pandas-DataFrame (unter diesem Thema) aufgeführten pandas-API-Aufrufe des Python-Konnektors zu verwenden.
Bemerkung
Dank der Unterstützung von pandas im Python-Konnektor wird SQLAlchemy nicht mehr dafür benötigt, Daten eines Cursors in einen DataFrame zu konvertieren.
Sie können jedoch weiterhin SQLAlchemy verwenden, wenn Sie dies wünschen. Der Python-Konnektor ist weiterhin mit SQLAlchemy kompatibel.