Utilisation de DataFrames Pandas avec le connecteur Python

pandas est une bibliothèque d’analyse de données. Avec Pandas, vous utilisez une structure de données appelée DataFrame pour analyser et manipuler des données bidimensionnelles (telles que les données d’une table de base de données).

Si vous devez obtenir des données d’une base de données Snowflake vers un DataFrame Pandas, vous pouvez utiliser les méthodes API fournies avec le connecteur Snowflake pour Python. Le connecteur fournit également des méthodes API pour écrire des données d’un DataFrame Pandas dans une base de données Snowflake.

Note

Certaines de ces méthodes API nécessitent une version spécifique de la bibliothèque PyArrow. Voir Exigences pour plus de détails.

Dans ce chapitre :

Exigences

Actuellement, les méthodes d’API orientées Pandas dans l’API du connecteur Python fonctionnent avec :

  • Connecteur Snowflake 2.1.2 (ou supérieur) pour Python.

  • Version 3.0.x de la bibliothèque PyArrow

    Si PyArrow n’est pas installé, vous n’avez pas besoin d’installer PyArrow vous-même ; l’installation du connecteur Python comme indiqué ci-dessous installe automatiquement la version appropriée de PyArrow.

    Prudence

    Si vous avez déjà une version de la bibliothèque PyArrow autre que la version recommandée répertoriée ci-dessus, veuillez désinstaller PyArrow avant d’installer le connecteur Snowflake pour Python. Ne réinstallez pas une version différente de PyArrow après avoir installé le connecteur Snowflake pour Python.

  • pandas 0.25.2 (ou supérieur). Les versions antérieures sont susceptibles de fonctionner, mais n’ont pas été testées.

Installation

Pour installer la version compatible Pandas du connecteur Snowflake pour Python, exécutez la commande :

pip install "snowflake-connector-python[pandas]"
Copy

Vous devez saisir les crochets ([ et ]) comme indiqué dans la commande. Les crochets spécifient la partie supplémentaire du paquet qui doit être installée.

Utilisez des guillemets autour du nom du paquet (comme indiqué) pour éviter que les crochets ne soient interprétés comme des caractères génériques.

Si vous devez installer d’autres « extras » (par exemple, secure-local-storage pour la mise en cache des connexions avec SSO sur le navigateur ou la mise en cache des jetons MFA), utilisez une virgule entre les extras :

pip install "snowflake-connector-python[secure-local-storage,pandas]"
Copy

Lecture des données d’une base de données Snowflake vers un DataFrame Pandas

Pour lire des données dans un DataFrame Pandas, vous utilisez un curseur pour récupérer les données , puis appelez l’une de ces méthodes Cursor pour placer les données dans un DataFrame Pandas :

Écriture de données depuis un DataFrame Pandas dans une base de données Snowflake

Pour écrire des données depuis un DataFrame Pandas dans une base de données Snowflake, effectuez l’une des manipulations suivantes :

  • Appelez la fonction write_pandas().

  • Appelez la méthode pandas.DataFrame.to_sql() (voir la documentation Pandas) et spécifiez pd_writer() comme méthode d’insertion de données dans la base de données.

Mappage de données Snowflake vers Pandas

Le tableau ci-dessous montre le mappage des types de données Snowflake aux types de données Pandas :

Type de données Snowflake

Type de données Pandas

FIXED NUMERIC type (échelle = 0) sauf DECIMAL

(u)int{8,16,32,64} ou float64 (pour NULL)

FIXED NUMERIC type (échelle > 0) sauf DECIMAL

float64

FIXED NUMERIC type DECIMAL

decimal

FLOAT/DOUBLE

float64

VARCHAR

str

BINARY

str

VARIANT

str

DATE

object (avec objets datetime.date)

TIME

pandas.Timestamp(np.datetime64[ns])

TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ

pandas.Timestamp(np.datetime64[ns])

Remarques :

  • Si le type de données Snowflake est FIXED NUMERIC et l’échelle est zéro, et si la valeur est NULL, alors la valeur est convertie en float64, pas en type entier.

  • Si une conversion provoque un débordement, le connecteur Python lève une exception.

Importation pandas

Habituellement, les importations Pandas sont effectuées avec l’instruction suivante :

import pandas as pd
Copy

Vous pouvez voir des références aux objets Pandas comme pandas.object ou pd.object.

Migration vers des DataFrames Pandas

Cette section est principalement destinée aux utilisateurs qui ont déjà utilisé Pandas (et éventuellement SQLAlchemy).

Les utilisateurs précédents de Pandas peuvent avoir un code similaire à l’un des suivants :

  • Cet exemple montre la manière originale de générer un DataFrame Pandas à partir du connecteur Python :

    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)
    
    Copy
  • Cet exemple montre comment utiliser SQLAlchemy pour générer un DataFrame Pandas :

    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)
    
    Copy

Le code similaire à l’un des exemples précédents peut être converti pour utiliser les appels d’API Pandas du connecteur Python répertoriés dans Lecture de données depuis une base de données Snowflake vers un DataFrame Pandas (dans ce chapitre).

Note

Avec la prise en charge de Pandas dans le connecteur Python, SQLAlchemy n’est plus nécessaire pour convertir les données d’un curseur en DataFrame.

Cependant, vous pouvez continuer à utiliser SQLAlchemy si vous le souhaitez ; le connecteur Python conserve la compatibilité avec SQLAlchemy.