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ライブラリ バージョン3.0.x。

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

    ご用心

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

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

インストール

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

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

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

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

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

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

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

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

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

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

  • write_pandas() 関数を呼び出す。

  • pandas.DataFrame.to_sql() メソッドを呼び出し(Pandasドキュメント を参照)、データベースにデータを挿入するために使用するメソッドとして:py:func:`pd_writer ` を指定する。

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

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

Snowflakeデータ型

Pandasデータ型

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

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

DECIMALを除くFIXED NUMERIC型(スケール > 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
Copy

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)
    
    Copy
  • この例は、 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)
    
    Copy

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

注釈

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

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