Verwenden von pandas-DataFrames mit dem Python-Konnektor¶
pandas is a library for data analysis. With pandas, you use a data structure called a DataFrame to analyze and manipulate two-dimensional data (such as data from a database table).
Wenn Sie Daten aus einer Snowflake-Datenbank in einen pandas-DataFrame übertragen müssen, können Sie die mit dem Snowflake Connector 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
Some of these API methods require a specific version of the PyArrow library. See Requirements for details.
Unter diesem Thema:
Anforderungen¶
Derzeit verwenden die pandas-orientierten API-Methoden der Python-Konnektor-API Folgendes:
Snowflake Connector 2.1.2 (oder höher) für Python.
PyArrow library 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 Connector für Python installieren. Führen Sie nach der Installation des Snowflake Connector 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 Connector für Python zu installieren:
pip install "snowflake-connector-python[pandas]"
You must enter the square brackets ([
and ]
) as shown in the command. The square brackets specify the
extra part of the package that should be installed.
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.Call the
pandas.DataFrame.to_sql()
method (see the pandas documentation), and specifypd_writer()
as the method to use to insert the data into the database.
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.