PythonコネクタでのPandas DataFrames の使用

Pandas は、データ分析用のライブラリです。Pandasでは、 DataFrame と呼ばれるデータ構造を使用して、2次元データ(データベーステーブルからのデータなど)を分析および操作します。

SnowflakeデータベースからPandas DataFrame にデータを取得する必要がある場合は、Python用Snowflakeコネクタで提供される API メソッドを使用できます。コネクタは、Pandas DataFrame からSnowflakeデータベースにデータを書き込むための API メソッドも提供します。

注釈

これらの API メソッドの一部には、特定のバージョンの PyArrowライブラリ が必要です。詳細については、 要件 をご参照ください。

このトピックの内容:

要件

現在、Pythonコネクタ API のPandas指向の API メソッドは以下で動作します。

  • Python用 Snowflakeコネクタ2.1.2 (またはそれ以上)。

  • PyArrow ライブラリ バージョン0.17.0。

    PyArrow がインストールされていない場合は、自分で PyArrow をインストールする必要はありません。以下に記載されているPythonコネクタをインストールすると、適切なバージョンの PyArrow が自動的にインストールされます。

    ご用心

    上記の推奨バージョン以外のバージョンの PyArrow ライブラリを既にお持ちの場合は、Python用Snowflakeコネクタをインストールする前に PyArrow をアンインストールしてください。Python用Snowflakeコネクタのインストール後に、異なるバージョンの PyArrow を再インストールしないでください。

  • Pandas 0.25.2(またはそれ以上)。以前のバージョンは動作する可能性がありますが、テストされていません。

  • pip 19.0(またはそれ以上)

  • Python

    • MS Windowsの場合:3.5、3.6、または3.7。

    • Linuxおよび macOS の場合:3.5、3.6、3.7、または3.8。

インストール

Pandas互換バージョンのPython用Snowflakeコネクタをインストールするには、次のコマンドを実行します。

pip install snowflake-connector-python[pandas]

コマンドに表示されているように、角括弧([ および ])を入力する必要があります。角括弧は、インストールする必要がある パッケージの追加部分 を指定します。

角括弧がワイルドカードとして解釈されないようにするには、パッケージ名を引用符で囲みます(図参照)。

他の追加機能(たとえば、 ブラウザーベースの SSO を使用したキャッシュ接続secure-local-storage)をインストールする必要がある場合は、追加機能の間にコンマを使用します。

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

SnowflakeデータベースからPandas DataFrame へのデータの読み取り

Pandas DataFrame にデータを読み込むには、 カーソル を使用して データを取得 し、次にこれらの Cursor メソッドの1つを呼び出してデータをPandas DataFrame に入力します。

Pandas DataFrame からSnowflakeデータベースへのデータの書き込み

Pandas DataFrame からSnowflakeデータベースにデータを書き込むには、次の内の 1つ を実行します。

SnowflakeからPandasへのデータマッピング

次のテーブルは、Snowflakeデータ型からPandasデータ型へのマッピングを示しています。

Snowflakeデータ型

Pandasデータ型

FIXED NUMERIC DECIMAL を除く型(スケール = 0)

(u)int{8,16,32,64} または float64 ( NULL の場合)

FIXED NUMERIC DECIMAL を除く型(スケール > 0)

float64

FIXED NUMERIC 型 DECIMAL

decimal

FLOAT/DOUBLE

float64

VARCHAR

str

BINARY

str

VARIANT

str

DATE

objectdatetime.date オブジェクトを使用)

TIME

pandas.Timestamp(np.datetime64[ns])

TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ

pandas.Timestamp(np.datetime64[ns])

メモ:

  • Snowflakeデータ型が FIXED NUMERIC でスケールが0、値が NULL の場合、値は整数型ではなく float64 に変換されます。

  • 変換によってオーバーフローが発生した場合、Pythonコネクタは例外をスローします。

Pandasのインポート

通常、Pandasは次のステートメントでインポートされます。

import pandas as pd

Pandasオブジェクトへの参照が pandas.object または pd.object として表示される場合があります。

Pandas DataFrames への移行

このセクションは主に、以前にPanda(および場合によっては SQLAlchemy)を使用したことがあるユーザーを対象としています。

以前のPandasユーザーは、次のいずれかに似たコードを持っている可能性があります。

  • この例は、PythonコネクタからPandas DataFrame を生成する元の方法を示しています。

    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)
    
  • この例は、 SQLAlchemy を使用してPandas DataFrame を生成する方法を示しています。

    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)
    

前述の例のいずれかに類似したコードは、 データの読み込み:SnowflakeデータベースからPandas DataFrame (このトピック内)にリストされている、PythonコネクタPandas API 呼び出しを使用するように変換できます。

注釈

PythonコネクタでのPandaのサポートにより、 SQLAlchemy は、カーソル内のデータを DataFrame に変換するために必要ではなくなりました。

ただし、必要に応じて SQLAlchemy を引き続き使用できます。Pythonコネクタは SQLAlchemy との互換性を維持しています。