Verteilen von Workloads, die Ergebnisse mit dem Snowflake-Konnektor für Python abrufen¶
Wenn Sie eine verteilte Umgebung verwenden, um Workloads zu parallelisieren, können Sie den Snowflake-Konnektor für Python verwenden, um das Abrufen und Verarbeiten von Ergebnissen zu verteilen.
Einführung¶
Nachdem Sie mit dem Objekt Cursor eine Abfrage ausgeführt haben, können Sie das Abrufen der Ergebnisse mithilfe von Resultbatches verteilen. Ein Resultbatch kapselt eine Funktion, die eine Teilmenge der Ergebnisse abruft. Sie können verschiedenen Mitarbeitern unterschiedliche Resultbatches zuweisen, um Ergebnisse parallel abzurufen und zu verarbeiten.
Abrufen der Liste der Resultbatches¶
Nachdem Sie eine Abfrage ausgeführt haben, können Sie die Ergebnisse in einem der folgenden Formate abrufen:
ResultBatch-Objekte.
Dazu rufen Sie die Methode
get_result_batches()im Cursor-Objekt auf. Dies gibt eine Liste vonResultBatch-Objekten zurück, die Sie verschiedenen Mitarbeitern zur Bearbeitung zuweisen können.PyArrow-Tabellen.
Weitere Informationen dazu finden Sie unter PyArrow-Tabellen.
Sie können die folgenden Methoden verwenden, um die Resultbatches als PyArrow-Tabellen abzurufen:
fetch_arrow_all(): Rufen Sie diese Methode auf, um eine PyArrow-Tabelle mit allen Ergebnissen zurückzugeben.fetch_arrow_batches(): Rufen Sie diese Methode auf, um einen Iterator zurückzugeben, den Sie verwenden können, um eine PyArrow-Tabelle für jeden Resultbatch zurückzugeben.
Beispiel:
pandas-DataFrame-Objekte.
Wenn Sie die pandas-kompatible Version des Snowflake-Konnektor für Python installiert haben, können Sie die folgenden Methoden verwenden, um die Resultbatches als pandas-DataFrame-Objekte abzurufen:
fetch_pandas_all(): Rufen Sie diese Methode auf, um einen pandas-DataFrame mit allen Ergebnissen zurückzugeben.fetch_pandas_batches(): Rufen Sie diese Methode auf, um einen Iterator zurückzugeben, den Sie verwenden können, um einen pandas-DataFrame für jeden Resultbatch zurückzugeben.
Beispiel:
Serialisieren von Resultbatches¶
Um die Resultbatches auf andere Worker oder Knoten zu verschieben, können Sie die Resultbatches serialisieren und deserialisieren. Beispiel:
Verwenden von Resultbatches¶
In den nächsten Abschnitten wird erklärt, wie ResultBatch-Objekte verwendet werden:
Abrufen der Anzahl der Zeilen und der Größe eines Resultbatches
Konvertieren eines Arrow-Resultbatches in eine PyArrow-Tabelle oder einen pandas-DataFrame
Iteration über Zeilen in einem Resultbatch¶
Mit einem ResultBatch-Objekt können Sie über die Zeilen iterieren, die zu diesem Batch gehören. Beispiel:
Wenn Sie einen Iterator für ein ResultBatch-Objekt erstellen, ruft das Objekt die Teilmenge der Zeilen dieses Batches ab und konvertiert sie.
Materialisieren der Zeilen in einem Resultbatch¶
Die Teilmenge von Zeilen in einem Resultbatch wird durch Übergabe dieses ResultBatch-Objekts an die Funktion list() materialisiert. Beispiel:
Abrufen der Anzahl der Zeilen und der Größe eines Resultbatches¶
Wenn Sie die Anzahl der Zeilen in einem Resultbatch und die Größe der Daten bestimmen müssen, können Sie die Attribute rowcount, compressed_size und uncompressed_size des ResultBatch-Objekts verwenden. Beispiel:
Beachten Sie, dass diese Attribute verfügbar sind, bevor Sie über den Resultbatch iterieren. Um die Werte dieser Attribute zu erhalten, müssen Sie die Teilmenge der Zeilen für den Batch nicht extra abrufen.
Konvertieren eines Arrow-Resultbatches in eine PyArrow-Tabelle oder einen pandas-DataFrame¶
Um einen ArrowResultBatch in eine PyArrow-Tabelle oder einen pandas-DataFrame zu konvertieren, verwenden Sie die folgenden Methoden:
to_pandas(): Rufen Sie diese Methode auf, um einen pandas-DataFrame zurückzugeben, der die Zeilen einesArrowResultBatchenthält, wenn Sie die pandas-kompatible Version des Snowflake-Konnektors für Python installiert haben.to_arrow(): Rufen Sie diese Methode auf, um eine PyArrow-Tabelle zurückzugeben, die die Zeilen einesResultBatchenthält.
Beispiel: