Verwenden von Drittanbieter-Paketen

Stagingbereiche können verwendet werden, um Pakete von Drittanbietern zu importieren. Sie können auch Anaconda-Pakete angeben, die installiert werden sollen, wenn Sie Python-UDFs erstellen.

Unter diesem Thema:

Importieren von Paketen über eine Snowflake-Stagingbereiche

Snowflake-Stagingbereiche können zum Import von Paketen verwendet werden. Sie können beliebigen Python-Code einbringen, der den unter Allgemeine Einschränkungen definierten Richtlinien folgt. Weitere Informationen dazu finden Sie unter Erstellen eines Python-UDF mit aus einem Stagingbereich hochgeladenem Code.

Verwenden von Drittanbieterpaketen aus Anaconda

Eine Reihe beliebter Open-Source-Python-Pakete von Drittanbietern, die von Anaconda erstellt und zur Verfügung gestellt werden, sind in Snowflake sofort einsatzbereit. Für die Nutzung der Anaconda-Pakete fallen neben den üblichen verbrauchsabhängigen Preisen von Snowflake keine weiteren Kosten an.

Eine Liste der Drittanbieterpakete von Anaconda finden Sie im Anaconda-Snowflake-Kanal.

Um das Hinzufügen neuer Pakete anzufordern, gehen Sie auf die Seite Snowflake-Ideen der Snowflake-Community. Wählen Sie die Kategorie Python Packages & Libraries aus, und prüfen Sie, ob bereits jemand anderes dieses Paket angefordert hat. Wenn ja, geben Sie Ihre Stimme ab. Wenn nicht, klicken Sie auf New Idea, und reichen Ihren Vorschlag ein.

Erste Schritte

Bevor Sie die von Anaconda in Snowflake bereitgestellten Pakete verwenden können, müssen Sie die Snowflake-Bedingungen für Drittanbieter anerkennen, indem Sie die folgenden Schritte ausführen.

Bemerkung

  • Um die Schritte in diesem Abschnitt ausführen zu können, ist die Rolle des Organisationsadministrators (d. h. der Benutzer mit der Systemrollen ORGADMIN) erforderlich. Weitere Informationen dazu finden Sie unter Aktivieren der ORGADMIN-Rolle für ein Konto. Allgemeine Informationen zu Organisationen finden Sie unter Verwalten Ihrer Snowflake-Organisation.

  • Um die Bedingungen zu akzeptieren, müssen für den Benutzer die folgenden Benutzereigenschaften eingestellt sein:

    • Vorname

    • Nachname

    • E-Mail-Adresse


    Wenn die Benutzereigenschaften nicht festgelegt sind, zeigt die Snowflake-UI eine Meldung an, die Sie auffordert, diese Eigenschaften zu aktualisieren, bevor Sie fortfahren. Ein Benutzeradministrator (d. h. ein Benutzer mit der Rolle USERADMIN) oder eine höhere Rolle oder eine andere Rolle mit OWNERSHIP-Berechtigung für Ihr Snowflake-Benutzerobjekt kann diese Details zu Ihrem Benutzerprofil hinzufügen. Weitere Informationen dazu finden Sie unter Ändern anderer Benutzereigenschaften.

  1. Melden Sie sich bei Snowsight, der Snowflake-Weboberfläche, an.

  2. Klicken Sie auf das Dropdown-Menü neben Ihrem Anmeldenamen, und klicken Sie dann auf Switch Role » ORGADMIN, um zur Rolle des Organisationsadministrators zu wechseln.

  3. Klicken Sie auf Admin » Billing » Terms & Billing.

  4. Scrollen Sie zum Abschnitt Anaconda, und klicken Sie auf die Schaltfläche Enable. Das Dialogfenster Anaconda Packages (Preview Feature) wird geöffnet.

  5. Klicken Sie auf den Link, um die Snowflake-Bedingungen für Drittanbieter zu prüfen.

  6. Wenn Sie mit den Bedingungen einverstanden sind, klicken Sie auf die Schaltfläche Acknowledge & Continue.

Anzeigen und Verwenden von Paketen

Anzeigen verfügbarer Pakete

Sie können alle verfügbaren Pakete und deren Versionsinformationen anzeigen, indem Sie die Ansicht PACKAGES des Information Schema abfragen.

select * from information_schema.packages where language = 'python';

Um Versionsinformationen über ein bestimmtes Paket, z. B. numpy, anzuzeigen, verwenden Sie folgenden Befehl:

select * from information_schema.packages where (package_name = 'numpy' and language = 'python');

Bemerkung

Einige Pakete im Anaconda-Snowflake-Kanal sind nicht für die Verwendung in Snowflake-UDFs vorgesehen, da UDFs innerhalb einer eingeschränkten Engine ausgeführt werden. Weitere Informationen dazu finden Sie unter Einsetzen von bewährten Sicherheitsmethoden.

Wenn Sie dann in einem Snowflake-Warehouse Abfragen ausführen, die gespeicherte Python-UDFs aufrufen, werden die Anaconda-Pakete nahtlos installiert und in dem virtuellen Warehouse für Sie zwischengespeichert.

Anzeigen installierter Pakete

Sie können eine Liste der Pakete und Module anzeigen, die eine UDF oder UDTF verwendet, indem Sie den Befehl DESCRIBE FUNCTION ausführen. Die Ausführung des Befehls DESCRIBE FUNCTION für eine UDF, dessen Handler in Python implementiert ist, gibt die Werte mehrerer Eigenschaften zurück, darunter eine Liste der importierten Module und Pakete sowie der installierten Pakete, der Funktionssignatur und des Rückgabetyps.

Wenn Sie den Bezeichner für die UDF angeben, müssen Sie auch die Typen der Funktionsparameter angeben, falls vorhanden.

desc function stock_sale_average(varchar, number, number);

Verwenden von Anaconda-Paketen

Ein Beispiel für die Verwendung eines importierten Anaconda-Pakets in einer Python-UDF finden Sie unter Verwenden eines importierten Pakets in einer Inline-Python-UDF.

Performance von Warehouses im kalten Zustand

Für eine effizientere Ressourcenverwaltung werden neu eingerichtete virtuelle Warehouses nicht mit Anaconda-Paketen vorinstalliert. Stattdessen werden die Anaconda-Pakete bei Bedarf installiert, wenn eine UDF erstmals verwendet wird. Die Pakete werden für eine spätere UDF-Ausführung im selben Warehouse im Cache zwischengespeichert. Der Cache wird gelöscht, wenn das Warehouse angehalten wird. Dies kann bei der erstmaligen Verwendung einer UDF oder nach dem Fortsetzen des Warehouses zu einer langsameren Performance führen. Die zusätzliche Latenz könnte etwa 30 Sekunden betragen.

Lokale Entwicklung und Testen

Um das Erstellen einer Conda-Umgebung auf Ihrem lokalen Rechner für Entwicklung und Testen zu unterstützen, hat Anaconda einen Snowflake-Kanal eingerichtet, der eine Teilmenge der Pakete und Versionen spiegelt, die in der Snowflake-Python-UDF-Umgebung unterstützt werden. Sie können den Snowflake-Conda-Kanal für lokale Tests und Entwicklung kostenlos auf Grundlage der ergänzenden Bedingungen für eingebettete Software in den Anaconda-Nutzungsbedingungen verwenden.

Um z. B. eine neue Conda-Umgebung lokal über den Snowflake-Kanal zu erstellen, geben Sie in der Befehlszeile in etwa Folgendes ein:

conda create --name py38_env -c https://repo.anaconda.com/pkgs/snowflake python=3.8 numpy pandas

Beachten Sie, dass aufgrund von Plattformunterschieden Ihre lokale Conda-Umgebung möglicherweise nicht genau mit der Serverumgebung übereinstimmt.

Best Practices

Innerhalb der create function-Anweisung sollte die Paketspezifikation (z. B. packages = ('numpy','pandas')) nur die Top-Level-Pakete angeben, die die UDF direkt verwendet. Anaconda verwaltet die Abhängigkeiten der Pakete und installiert die erforderlichen Abhängigkeiten automatisch. Aus diesem Grund sollten Sie keine Abhängigkeitspakete angeben.

Wenn Sie keine Paketversion angeben, wird Anaconda die aktuelle Version des Pakets und dessen Abhängigkeiten installieren. Im Allgemeinen ist es nicht notwendig, eine bestimmte Paketversion anzugeben. Beachten Sie, dass die Versionsauflösung nur einmal beim Erstellen der UDF mit dem Befehl create function ausgeführt wird. Danach wird die resultierende Versionsauflösung eingefroren, und es wird wieder dasselbe Set von Paketen verwendet, wenn diese UDF ausgeführt wird.

Ein Beispiel für die Verwendung der Paketspezifikation innerhalb der create function-Anweisung finden Sie unter Verwenden eines importierten Pakets in einer Inline-Python-UDF.

Bekannte Probleme mit Paketen von Drittanbietern

Performance bei einzeiligen Vorhersagen

Einige Data Science-Frameworks wie Scikit-learn und TensorFlow können bei einzeiligen ML-Vorhersagen langsam sein.

Um die Leistung zu verbessern, führen Sie anstelle einer einzeiligen Vorhersage eine Batchvorhersage aus. Konvertieren Sie dazu das Eingabe-Dataset in Snowflake-Arrays, und stellen Sie die Arrays im Vorhersagecode bereit. Die Batchverarbeitung kann mit tabellarischen Python-UDTFs, mit der ARRAY_AGG-Funktion Tabellarische Java-UDFs (UDTFs) oder mit Tabellarische JavaScript-UDFs (UDTFs) erfolgen.

Sie können auch die Python-UDF-Batch-API verwenden, um Python-Funktionen zu definieren, die Eingabezeilen in Batches empfangen, die für maschinelles Lernen und Data Science optimiert sind. Weitere Informationen dazu finden Sie unter Python-UDF-Batch-API.

Herunterladen von Daten auf Abruf aus Data Science-Bibliotheken

Einige Data Science-Bibliotheken wie NLTK, Keras und spaCy bieten Funktionen, mit denen bei Bedarf zusätzlicher Korpora, Daten und Modelle heruntergeladen werden können.

Das Herunterladen auf Abruf funktioniert jedoch bei Python-UDFs nicht, da einige Funktionen wie der Netzwerkzugang und das Schreiben in Dateien aufgrund von Snowflake-Sicherheitseinschränkungen deaktiviert sind.

Um dieses Problem zu umgehen, laden Sie die Daten in Ihre lokale Umgebung herunter, und stellen Sie diese dann der UDF über einen Snowflake-Stagingbereich bereit.

XGBoost

Bei Verwendung von XGBoost in einer UDF oder UDTF für parallele Vorhersagen oder Training muss die Parallelität für jede XGBoost-Instanz auf 1 gesetzt werden. Dadurch wird sichergestellt, dass XGBoost bei der Ausführung in der Snowflake-Umgebung für eine optimale Performance konfiguriert ist.

Beispiele:

import xgboost as xgb
model = xgb.Booster()
model.set_param('nthread', 1)
model.load_model(...)
import xgboost as xgb
model = xgb.XGBRegressor(n_jobs=1)

TensorFlow/Keras

Wenn Sie Tensorflow/Keras für die Vorhersage verwenden, benutzen Sie Model.predict_on_batch und nicht Model.predict.

Beispiel:

import keras
model = keras.models.load_model(...)
model.predict_on_batch(np.array([input]))