Bewährte Verfahren für den externen Netzwerkzugriff

Dieses Thema enthält bewährte Verfahren für den Zugriff auf externe Netzwerkstandorte über benutzerdefinierte Funktionen und Verfahren.

Anwendung bewährter Verfahren aus externen Funktionen

Befolgen Sie die für externe Funktionen beschriebenen bewährten Verfahren, einschließlich der folgenden:

Beachten Sie, dass Sie im Gegensatz zu externen Funktionen in Ihrem Handler-Code für die Durchführung von Wiederholungen, das Senden von Batch-Anforderungen von vektorisierten UDFs und die Verwaltung von Ausnahmen verantwortlich sind.

Verarbeiten Sie eine Zeile nach der anderen, wenn Sie externen Zugriff in einer vektorisierten UDF oder UDTF nutzen

Wenn Ihr vektorisierter UDF- oder UDTF-Handler-Code Anfragen an ein externes Netzwerk stellt, sollten Sie jede Zeile unabhängig verarbeiten, um nicht deterministische Ergebnisse zu vermeiden.

Um den Netzwerkaufwand zu minimieren, fasst Snowflake normalerweise Zeilen in Batches zusammen, um sie an Remotedienste zu senden. Die Anzahl der Batches und die Größe jedes Batches können variieren.

Darüber hinaus kann die Reihenfolge der Batches variieren, und die Reihenfolge der Zeilen innerhalb eines Batches kann variieren. Selbst wenn die Abfrage eine ORDER BY-Klausel enthält, wird ORDER BY normalerweise nach der Anfrage an den externen Netzerkstandort angewendet.

Da die Stapelgröße und die Zeilenreihenfolge nicht garantiert werden können, kann das Schreiben eines Handler-Codes, der einen Wert für eine Zeile zurückgibt, der von einer anderen Zeile in diesem Batch oder früheren Batches abhängt, zu nicht deterministischen Ergebnissen führen.

Snowflake empfiehlt dringend, dass der Code jede Zeile unabhängig verarbeitet.

Der Rückgabewert für jede Eingabezeile sollte nur von dieser Eingabezeile abhängen, nicht von anderen Eingabezeilen. (Derzeit unterstützen Handler, die einen externen Netzwerkzugriff durchführen, zum Beispiel nicht die Fensterfunktionen von </sql-reference/functions-analytic>)

Beachten Sie außerdem, dass das Zählen von Batches nicht sinnvoll ist, da die Batchgröße nicht garantiert ist.

Wiederverwendung der TCP-Verbindung, wenn möglich

Snowflake begrenzt die Gesamtzahl der Verbindungen, die von einer UDF aus hergestellt werden können. Wenn diese Grenze erreicht ist, wird möglicherweise die folgende Fehlermeldung angezeigt:

Cannot assign requested address
Copy

Um Probleme mit der Ressourcenerschöpfung zu vermeiden, sollten Sie versuchen, Verbindungen so oft wie möglich wiederzuverwenden. Sie können dies erreichen, indem Sie den TCP-Client oder die Sitzung einmal während der UDF-Initialisierung erstellen und ihn/sie dann im UDF-Handler für den Rest der Abfrage verwenden. Bei in Python geschriebenem Code können Sie beispielsweise das Session-Objekt (verfügbar in der Python-Bibliothek requests) für mehrere HTTP-Aufrufe wiederverwenden.

Weitere Informationen und ein Beispiel finden Sie unter Verwendung der Integration für den externen Zugriff in einer Funktion oder Prozedur.

Transiente Fehler im Code erwarten und behandeln

Wenn Sie eine lang laufende Abfrage haben, die den Remotedienst mehrfach aufruft, kann es vorkommen, dass einer der Aufrufe mit einem transienten Fehler fehlschlägt. Um Abfragefehler zu vermeiden, sollte Ihr Code Wiederholungsversuche durchführen und Fehler unter der Annahme behandeln, dass Fehler auftreten können.