Einführung in externe Funktionen

Unter diesem Thema werden externe Funktionen beschrieben, die ausführbaren Code aufrufen, der außerhalb von Snowflake entwickelt, verwaltet, gespeichert und ausgeführt wird.

Unter diesem Thema:

Siehe auch:

CREATE EXTERNAL FUNCTION, CREATE API INTEGRATION

Was ist eine externe Funktion?

Eine externe Funktion ruft Code auf, der außerhalb von Snowflake ausgeführt wird. Der ausgeführte Code wird als Remotedienst bezeichnet.

Benutzer können ihre eigenen Remotedienste schreiben und aufrufen oder Remotedienste aufrufen, die von Dritten geschrieben wurden. Diese Remotedienste können mit jedem HTTP-Server-Stack geschrieben werden, einschließlich serverlosen Cloud-Computediensten wie AWS Lambda.

Aus der Sicht eines Benutzers, der eine SQL-Anweisung ausführt, verhält sich eine externe Funktion wie jede andere Skalarfunktion. Eine SQL-Anweisung führt die folgenden Aktionen aus:

  1. Aufruf der Funktion und optional die Übergabe von Parametern.

  2. Empfang der Rückgabewerte der Funktion.

In SQL-Anweisungen verhalten sich externe Funktionen im Allgemeinen wie UDFs (benutzerdefinierte Funktionen). Beispielsweise unterliegen externe Funktionen folgenden Regeln:

  • In Snowflake wird eine externe Funktion als Datenbankobjekt dargestellt. Dieses Objekt wird in einer bestimmten Datenbank und einem bestimmten Schema erstellt und kann mithilfe der Punktnotation (z. B. MY_DATABASE.MY_SCHEMA.MY_EXTERNAL_FUNCTION()) referenziert werden.

  • Eine externe Funktion kann in jeder Klausel einer SQL-Anweisung eingesetzt werden, in der auch andere Typen von Funktionen vorkommen können (z. B. die WHERE-Klausel).

  • Der zurückgegebene Wert kann ein zusammengesetzter Wert sein, z. B. ein VARIANT-Wert, der JSON-Werte enthält.

  • Externe Funktionen können überladen sein, d. h. zwei verschiedene Funktionen können denselben Namen, aber unterschiedliche Signaturen haben (unterschiedliche Zahlen oder Datentypen von Eingabeparametern).

  • Eine externe Funktion kann Teil eines komplexeren Ausdrucks sein:

    select upper(zipcode_to_city_external_function(zipcode))
      from address_table;
    

Häufig verwendete Begriffe für externe Funktionen

Nachfolgend finden Sie Definitionen für häufig verwendete Begriffe:

Remotedienst

Ein Remotedienst wird außerhalb von Snowflake gespeichert und ausgeführt und gibt einen Wert zurück. Beispielsweise können Remotedienste wie folgt implementiert werden:

  • als AWS Lambda-Funktion

  • als HTTPS-Server (z. B. Node.js), der auf einer EC2-Instanz ausgeführt wird

Um von der externen Snowflake-Funktion aufgerufen zu werden, muss der Remotedienst Folgendes bieten:

  • HTTPS-Endpunkt bereitstellen

  • JSON-Eingaben akzeptieren und JSON-Ausgaben zurückgeben

    Weitere Informationen zu Snowflake-kompatiblen HTTP-Headern und JSON-formatierten Daten finden Sie unter Dateiformat.

Externe Funktion

Eine externe Funktion ist ein Snowflake-Konstrukt, bei dem ein Remotedienst so angezeigt wird, als ob er sich in Snowflake befindet, sodass der Remotedienst durch eine SQL-Anweisung aufgerufen werden kann. Mit anderen Worten, eine externe Funktion lässt einen Remotedienst wie eine lokale Funktion aussehen.

Eine externe Funktion ist ein Satz von Informationen, mit denen Snowflake den Remotedienst aufruft. Zu diesen Informationen gehört die URL des Proxydienstes (z. B. AWS API Gateway), der Informationen zum und vom Remotedienst weiterleitet. Diese Informationen werden als Teil des Befehls CREATE EXTERNAL FUNCTION angegeben und in einem Datenbankobjekt gespeichert.

Benutzerdefinierte Funktion

Eine benutzerdefinierte Funktion (UDF) ist eine Funktion, die von einem Benutzer und nicht von Snowflake geschrieben wurde. Eine UDF kann sein:

  • intern, d. h. der ausführbare Code wird in Snowflake gespeichert und ausgeführt, oder

  • extern, d. h. eine externe Funktion sein, wie hier definiert (ein Konstrukt, mit dem sich ein Remotedienst wie eine lokale Funktion verwenden lässt).

Proxydienst

Snowflake ruft einen Remotedienst nicht direkt auf. Stattdessen ruft Snowflake einen Remotedienst indirekt über einen Proxydienst auf. Ein Proxydienst leitet eine Anforderung oder einen Funktionsaufruf (einschließlich Daten) von einer Software an eine andere weiter, beispielsweise von Snowflake an einen Remotedienst. In der Regel leitet der Proxydienst auch die zurückgegebenen Werte wieder zurück an den Aufrufer. Die Verwendung eines Proxydienstes erhöht die Flexibilität und Sicherheit.

Das AWS API Gateway ist ein Beispiel für einen Proxydienst.

Vorteile externer Funktionen

Externe Funktionen haben gegenüber anderen UDFs (benutzerdefinierten Funktionen) folgende Vorteile:

  • Der Code für den Remotedienst kann in Sprachen geschrieben werden, in denen andere UDFs nicht geschrieben werden können, einschließlich:

    • Python

    • Go

    • C#

  • Remotedienste können Funktionen und Bibliotheken verwenden, auf die interne UDFs nicht zugreifen können.

    • Remotedienste können mit kommerziell erhältlichen Bibliotheken von Drittanbietern verbunden werden, z. B. Scoring-Bibliotheken für maschinelles Lernen.

  • Entwickler können Remotedienste schreiben, die sowohl von Snowflake als auch von anderer Software aufgerufen werden können, die für dieselbe Schnittstelle geschrieben wurde.

Einschränkungen für externe Funktionen

Externe Funktionen haben folgende Einschränkungen:

  • Snowflake ruft Remotedienste indirekt über einen Cloud-HTTP-Proxydienst (z. B. das Amazon AWS API-Gateway) auf. Daher muss der Remotedienst für eine externe Funktion von einem Proxydienst aus aufgerufen werden können. Glücklicherweise kann auf fast jede Funktion, die als HTTPS-Endpunkt fungieren kann, als externe Funktion über einen Proxydienst zugegriffen werden. Der Proxydienst muss so programmiert sein, dass er den Remotedienst aufruft (z. B. eine Funktion, die auf AWS Lambda ausgeführt wird).

  • Derzeit können externe Funktionen nicht über Secure Data Sharing für Datenverbraucher freigegeben werden.

  • Da der Remotedienst für Snowflake nicht transparent ist, kann das Optimierungsprogramm möglicherweise einige Optimierungen nicht ausführen, die für nicht externe Funktionen ausgeführt werden könnten.

  • Derzeit müssen externe Funktionen Skalarfunktionen sein. Eine skalare externe Funktion gibt einen einzelnen Wert für jede Eingabe-„Zeile“ zurück.

  • Externe Funktionen können in folgenden Situationen nicht verwendet werden:

    • In der DEFAULT-Klausel einer CREATE TABLE-Anweisung. Mit anderen Worten, der Standardwert für eine Spalte kann kein Ausdruck sein, der eine externe Funktion aufruft.

    • COPY-Transformationen.

  • Externe Funktionen unterstützen nur Funktionen, keine gespeicherten Prozeduren.

Abrechnung der Nutzung externer Funktionen

Bei Verwendung externer Funktionen entstehen normale Kosten durch Datenübertragung und Warehousenutzung. Für die Nutzung externer Funktionen fallen keine zusätzlichen Kosten an.

Weitere Hinweise zu externen Funktionen

  • Bevor eine externe Funktion zum ersten Mal aufgerufen werden kann, muss ein Administrator einige Konfigurationen vornehmen. Diese Konfigurationen erfordern Kenntnisse der Cloudplattform (z. B. AWS), insbesondere zum Thema Sicherheit.

  • Das Schreiben eines benutzerdefinierten Remotedienstes erfordert normalerweise Kenntnisse zu Themen wie HTTP und REST-APIs.

  • Externe Funktionen haben mehr Overhead als interne Funktionen (sowohl integrierte als auch UDFs) und werden normalerweise langsamer ausgeführt.

  • Externe Funktionen können außerhalb von Snowflake zusätzliche Verarbeitungskosten verursachen.

  • Externe Funktionen können zusätzliche Sicherheitsprobleme aufwerfen. Wenn Sie beispielsweise die Funktion eines Drittanbieters aufrufen, kann dieser Kopien der an die Funktion übergebenen Daten aufbewahren.

  • Einige Cloudplattformen haben möglicherweise spezielle Anforderungen. Unter AWS sind für externe Funktionen beispielsweise regionale Endpunkte erforderlich. Weitere Details dazu finden Sie unter Unterstützte Plattformen.

Aufrufen einer externen Funktion

Das Aufrufen einer externen Funktion ist identisch mit dem Aufrufen einer anderen benutzerdefinierten Funktion. Externe Funktionen können in fast allen Klauseln vorkommen, in denen auch andere Funktionen vorkommen können.

Hier einige Beispiele für den Aufruf einer skalaren externen Funktion:

select my_external_function_2(column_1, column_2)
    from table_1;

select col1
    from table_1
    where my_external_function_3(col2) < 0
    ;

create view view1 (col1) as
    select my_external_function_5(col1)
        from table9;

Unterstützte Plattformen

Sie benötigen eine Plattform und ein Konto auf dieser Plattform für den Remotedienst und den Proxydienst. In vielen Fällen sind Plattform und Konto der Remotedienste identisch mit Plattform und Konto des Proxydienstes. Dies ist jedoch nicht erforderlich.

Diese Plattformen und Konten sind von Ihrer Snowflake-Plattform und Ihrem Konto getrennt.

Plattformen für den Remotedienst

Sie benötigen einen HTTP-Server-Stack, um den Remotedienst zu hosten. Jeder HTTP-Server-Stack, der den Remotedienst unterstützen kann, sollte mit externen Funktionen kompatibel sein.

Plattformen für den Proxydienst

Sie benötigen eine Instanz eines nativen HTTP-Proxydienstes auf einer Cloudplattform.

Um Ihren Proxydienst zu konfigurieren, benötigen Sie normalerweise Folgendes:

  • Ein Konto beim Anbieter einer Cloudplattform, z. B. Amazon AWS. Dieses Konto stellt Speicher- und Computeressourcen für den Proxydienst zur Verfügung. Dieses Konto ist von Ihrem Snowflake-Konto getrennt.

  • Eine Cloudplattformrolle, die über die zum Konfigurieren eines Proxydienstes erforderlichen Berechtigungen verfügt. Diese Cloudplattformrolle ist von Ihren Snowflake-Rollen getrennt.

Die folgenden HTTPS-Proxydienste werden unterstützt:

  • Amazon AWS API Gateway.

Obwohl der einzige Typ von Proxydienst, den Snowflake derzeit unterstützt, das AWS API Gateway ist, können Sie eine externe Funktion auch für Snowflake-Instanzen erstellen, die nicht von AWS gehostet werden. Wenn sich Ihr virtuelles Warehouse auf Microsoft Azure oder Google Cloud Platform (GCP) befindet, können Sie eine externe Funktion erstellen, die über ein AWS API Gateway auf einen Remotedienst zugreift.

Die folgenden Abschnitte enthalten plattformspezifische Informationen, die Benutzer kennen sollten, bevor sie eine Plattform auswählen.

Amazon AWS API Gateway