Snowpark-API

Die Snowpark-Bibliothek ist eine intuitive Bibliothek für die Abfrage und Verarbeitung von Daten in großem Umfang in Snowflake. Mithilfe einer Bibliothek für eine der drei Sprachen können Sie Anwendungen erstellen, die Daten in Snowflake verarbeiten, ohne dass Daten in das System verschoben werden müssen, das Ihren Anwendungscode ausführt. Zudem können Daten in großem Umfang als Teil der elastischen und serverlosen Snowflake-Engine verarbeitet werden.

Snowflake bietet derzeit Snowpark-Bibliotheken für drei Sprachen an: Java, Python und Scala.

Entwicklerhandbücher

Sie können Snowpark-Bibliotheken für die in der folgenden Tabelle aufgeführten Sprachen verwenden:

Sprache

Entwicklerhandbuch

API-Referenz

Java

Snowpark-Entwicklerhandbuch für Java

Snowpark-Bibliothek für Java-API-Referenz

Python

Snowpark-Entwicklerhandbuch für Python

Snowpark-Bibliothek für Python-API-Referenz

Scala

Snowpark-Entwicklerhandbuch für Scala

Snowpark-Bibliothek für Scala-API-Referenz

Download

Sie können die Snowpark-Bibliothek für jede der drei unterstützten Sprachen herunterladen. Downloads finden Sie unter Snowpark-Client-Download (Snowflake Developer Center).

Wichtige Features

Snowpark unterscheidet sich von anderen Client-Bibliotheken durch mehrere spezifische Features, die in den folgenden Abschnitten beschrieben werden.

Vorteile im Vergleich zum Spark-Konnektor

Im Vergleich zur Snowflake-Konnektor für Spark-Verwendung bietet die Entwicklung mit Snowpark die folgenden Vorteile:

  • Unterstützung der Interaktion mit Daten innerhalb von Snowflake unter Verwendung von Bibliotheken und Mustern, die speziell für verschiedene Sprachen entwickelt wurden, und ohne Nachteile für Performance oder Funktionalität.

  • Unterstützung für das Erstellen von Snowpark-Code mit lokalen Tools wie Jupyter, VS Code oder IntelliJ.

  • Unterstützung von Pushdown für alle Operationen, einschließlich Snowflake-UDFs. Das bedeutet, dass Snowpark die gesamte Datentransformation und -verarbeitung in die Snowflake-Datencloud verlagert, sodass Sie effizient mit Daten jedes Umfangs arbeiten können.

  • Für Berechnungen sind keine separaten Cluster außerhalb von Snowflake erforderlich. Alle Berechnungen werden innerhalb von Snowflake ausgeführt. Skalierungs- und Compute-Management werden von Snowflake übernommen.

Unterstützung für das Erstellen von SQL-Anweisungen mit nativen Konstrukten

Die Snowpark-API bietet Programmiersprachenkonstrukte zum Erstellen von SQL-Anweisungen. Die API bietet z. B. eine select-Methode für die Angabe der Spaltennamen, die zurückgegeben werden sollen, sodass Sie nicht 'select column_name' als Zeichenfolge schreiben müssen.

Sie können zwar weiterhin eine Zeichenfolge verwenden, um die auszuführende SQL-Anweisung zu spezifizieren, profitieren bei den von Snowpark bereitgestellten Programmiersprachenkonstrukten aber von Funktionen wie der intelligenten Codevervollständigung und Typüberprüfung.

Beispiel

Der Python-Code im folgenden Beispiel führt eine Select-Operation für die Tabelle sample_product_data unter Verwendung der Spalten id, name und serial_number aus.

>>> # Import the col function from the functions module.
>>> from snowflake.snowpark.functions import col

>>> # Create a DataFrame that contains the id, name, and serial_number
>>> # columns in the "sample_product_data" table.
>>> df = session.table("sample_product_data").select(col("id"), col("name"), col("serial_number"))
>>> df.show()
Copy

Reduzierter Datentransfer

Snowpark-Operationen werden im Lazy-Modus auf dem Server ausgeführt, d. h. Sie können die Bibliothek verwenden, um die Datentransformation bis zu einem möglichst späten Zeitpunkt in der Pipeline zu verzögern und gleichzeitig viele Operationen zu einer einzigen Operation zusammenzufassen. Dadurch wird die Menge der zwischen Ihrem Client und der Snowflake-Datenbank übertragenen Daten reduziert wird. Dies führt auch zur Verbesserung der Performance.

Die Kernabstraktion in Snowpark ist der DataFrame, der eine Menge von Daten repräsentiert und Methoden zur Verfügung stellt, um auf diesen Daten zu operieren. In Ihrem Clientcode erstellen Sie ein DataFrame-Objekt und richten es so ein, dass es die Daten abruft, die Sie verwenden möchten (z. B. die Spalten, die die Daten enthalten, den Filter, der auf die Zeilen angewendet werden soll, usw.).

Die Daten werden nicht abgerufen, wenn Sie das DataFrame-Objekt konstruieren. Stattdessen können Sie, wenn Sie zum Abrufen der Daten bereit sind, eine Aktion ausführen, die die DataFrame-Objekte auswertet und die entsprechenden SQL-Anweisungen zur Ausführung an die Snowflake-Datenbank sendet.

Beispiel

Mit dem Python-Code im folgenden Beispiel wird eine Abfrage für eine Tabelle erstellt. Der Code ruft die Methode collect auf, um die Abfrage auszuführen und die Ergebnisse abzurufen.

>>> # Create a DataFrame with the "id" and "name" columns from the "sample_product_data" table.
>>> # This does not execute the query.
>>> df = session.table("sample_product_data").select(col("id"), col("name"))

>>> # Send the query to the server for execution and
>>> # return a list of Rows containing the results.
>>> results = df.collect()
Copy

Möglichkeit zum Erstellen von Inline-UDFs

Sie können benutzerdefinierte Funktionen (UDFs) inline in einer Snowpark-Anwendung erstellen. Snowpark kann Ihren Code an den Server übertragen, wo der Code die Daten in großem Umfang verarbeiten kann. Dies ist nützlich für Schleifen- oder Batch-Funktionalität, bei der das Erstellen einer UDF Snowflake die Parallelisierung und die Anwendung der „Codeful“-Logik in großem Umfang innerhalb von Snowflake ermöglicht.

Sie können Funktionen in der gleichen Sprache schreiben, in der Sie Ihren Clientcode schreiben (z. B. durch Verwendung von anonymen Funktionen in Scala oder von Lambda-Funktionen in Python). Um diese Funktionen für die Verarbeitung von Daten in der Snowflake-Datenbank zu verwenden, definieren Sie in Ihrem kundenspezifischen Code benutzerdefinierte Funktionen (UDFs) und rufen Sie diese auf.

Snowpark überträgt den kundenspezifischen Code für UDFs automatisch in die Snowflake-Datenbank. Wenn Sie die UDF in Ihrem Clientcode aufrufen, wird Ihr kundenspezifischer Code auf dem Server ausgeführt (wo sich die Daten befinden). Sie müssen die Daten nicht an Ihren Client übertragen, um die Funktion auf den Daten auszuführen.

Beispiel

Der Python-Code im folgenden Beispiel erstellt eine UDF namens my_udf und weist dieser die Variable add_one zu.

>>> from snowflake.snowpark.types import IntegerType
>>> add_one = udf(lambda x: x+1, return_type=IntegerType(), input_types=[IntegerType()], name="my_udf", replace=True)
Copy