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 0.17.0.

    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.

  • pip 19.0 (oder höher)

  • Python

    • Unter MS Windows: 3.5, 3.6 oder 3.7.

    • Unter Linux und macOS: 3.5, 3.6, 3.7 oder 3.8.

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), 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:

Schreiben von Daten von einem Pandas-DataFrame in eine Snowflake-Datenbank

Führen Sie einen der folgenden Schritte aus, um Daten von einem Pandas-DataFrame in eine Snowflake-Datenbank zu schreiben:

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

(u)int{8,16,32,64} oder float64 (für NULL)

FIXED NUMERIC-Typ (Skalierung > 0) außer DECIMAL

float64

FIXED NUMERIC-Typ DECIMAL

decimal

FLOAT/DOUBLE

float64

VARCHAR

str

BINARY

str

VARIANT

str

DATE

object (mit datetime.date Objekten)

TIME

pandas.Timestamp(np.datetime64[ns])

TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ

pandas.Timestamp(np.datetime64[ns])

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, der einem der folgenden ähnlich ist:

  • Dieses 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)
    
  • Dieses 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.