Python用Snowflakeコネクタを使用して結果をフェッチするワークロードの分散¶
分散環境を使用してワークロードを並列化する場合は、Python用Snowflakeコネクタを使用して、結果のフェッチと処理の作業を分散できます。
概要¶
Cursor オブジェクトを使用してクエリを実行した後、結果バッチを使用して結果をフェッチする作業を分散できます。 結果バッチ は、結果のサブセットを取得する関数をカプセル化します。異なるワーカーを割り当てて異なる結果バッチを使用すると、結果を並行してフェッチおよび処理することができます。
結果バッチのリストの取得¶
クエリを実行した後、次のいずれかの形式で結果を取得できます。
ResultBatch オブジェクト。
これを実行するには、 カーソル オブジェクトで
get_result_batches()メソッドを呼び出します。これにより、処理のためにさまざまなワーカーに割り当てることができるResultBatchオブジェクトのリストが返されます。例:PyArrow テーブル。
詳細については、 PyArrow テーブル をご参照ください。
次のメソッドを使用して、結果バッチを PyArrow テーブルとして取得できます。
fetch_arrow_all(): このメソッドを呼び出して、すべての結果を含む PyArrow テーブルを返します。fetch_arrow_batches(): このメソッドを呼び出して、各結果バッチの PyArrow テーブルを返すために使用できる反復子を返します。
例:
Pandas DataFrame オブジェクト。
Python用SnowflakeコネクタのPandas互換バージョンをインストール している場合は、次の方法を使用して、結果バッチをPandas DataFrame オブジェクトとして取得できます。
fetch_pandas_all(): このメソッドを呼び出して、すべての結果を含むPandas DataFrame を返します。fetch_pandas_batches(): このメソッドを呼び出して、各結果バッチのPandas DataFrame を返すために使用できる反復子を返します。
例:
結果バッチのシリアル化¶
結果バッチを他のワーカーまたはノードに移動するために、結果バッチをシリアル化および逆シリアル化できます。例:
結果バッチの操作¶
次のセクションでは、 ResultBatch オブジェクトの操作方法について説明します。
結果バッチ内の行の反復処理¶
ResultBatch オブジェクトを使用すると、そのバッチの一部である行を反復処理できます。例:
ResultBatch オブジェクトの反復子を作成すると、オブジェクトはそのバッチの行のサブセットをフェッチして変換します。
結果バッチの行の具体化¶
その ResultBatch オブジェクトを list() 関数に渡すことにより、結果バッチの行のサブセットを具体化します。例:
結果バッチの行数およびサイズの取得¶
結果バッチの行数とデータのサイズを決定する必要がある場合は、 ResultBatch オブジェクトの rowcount、 compressed_size、および uncompressed_size 属性を使用できます。例:
これらの属性は、結果バッチを反復処理する前に使用できることに注意してください。これらの属性の値を取得するために、バッチの行のサブセットをフェッチする必要はありません。
Arrow結果バッチの PyArrow テーブルまたはPandas DataFrame への変換¶
ArrowResultBatch を PyArrow テーブルまたはPandas DataFrame に変換するには、次のメソッドを使用します。
to_pandas(): Python用SnowflakeコネクタのPandas互換バージョンをインストール している場合は、このメソッドを呼び出して、ArrowResultBatchの行を含むPandas DataFrame を返します。to_arrow(): このメソッドを呼び出して、ResultBatchの行を含む PyArrow テーブルを返します。
例: