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.
Quickstarts¶
Sie können die folgenden Quickstarts nutzen, um eine praktische Einführung in Snowpark zu erhalten.
Entwicklerhandbücher¶
Sie können Snowpark-Bibliotheken für die in der folgenden Tabelle aufgeführten Sprachen verwenden:
Sprache |
Entwicklerhandbuch |
API-Referenz |
---|---|---|
Java |
||
Python |
||
Scala |
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()
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()
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)