Best Practices für Snowpipe Streaming

Kostenoptimierung

Es empfiehlt sich, die API mit weniger Snowpipe Streaming-Clients aufzurufen, die mehr Daten pro Sekunde schreiben. Verwenden Sie eine Java- oder Scala-Anwendung, um Daten aus mehreren Quellen wie IoT-Geräten oder Sensoren zu aggregieren, und verwenden Sie dann das Snowflake Ingest SDK, um die API aufzurufen und die Daten mit höheren Datenflussraten zu laden. Die API aggregiert effizient Daten über mehrere Zieltabellen in einem Konto.

Ein einzelner Snowpipe Streaming-Client kann mehrere Kanäle zum Senden von Daten öffnen, aber die Kosten für den Client werden nur pro aktivem Client berechnet. Die Anzahl der Kanäle hat keinen Einfluss auf die Clientkosten. Daher empfehlen wir zur Leistungs- und Kostenoptimierung, pro Client mehrere Kanäle zu verwenden.

Die Nutzung derselben Tabellen sowohl für zur Batch- als auch zur Streaming-Erfassung kann aufgrund von vorweggenommenen Dateimigrationsoperationen ebenfalls zu geringeren Snowpipe Streaming-Computekosten führen. Wenn außerdem für die Tabelle, in die Snowpipe Streaming die Einfügungen vornimmt, Automatic Clustering aktiviert ist, können die Computekosten für die Dateimigration reduziert werden. Die Clustering-Operation optimiert und migriert Daten in derselben Transaktion.

Performance-Empfehlungen

Für eine optimale Performance bei Bereitstellungen mit hohem Durchsatz empfehlen wir die folgenden Maßnahmen:

  • Übergeben Sie Werte für TIME-, DATE- und alle TIMESTAMP-Spalten mit einem der unterstützten Typen aus dem java.time-Paket.

  • Wenn Sie einen Kanal mit OpenChannelRequest.builder erstellen, setzen Sie OnErrorOption auf OnErrorOption.CONTINUE und überprüfen Sie manuell den Rückgabewert von insertRows auf mögliche Erfassungsfehler. Dieser Ansatz führt derzeit zu einer besseren Performance als der Rückgriff auf Ausnahmen, die bei Verwendung von OnErrorOption.ABORT ausgelöst werden.

  • Halten Sie die Größe jedes an insertRows übergebenen Zeilenbatches unter 16 MB.

  • Wenn Sie mehrere Zeilen laden, ist die Verwendung von insertRows leistungsfähiger und kostengünstiger als das mehrmalige Aufrufen von insertRow, da weniger Zeit für Sperren aufgewendet wird.

  • Wenn Sie den Standard-Protokolliergrad auf DEBUG setzen, müssen Sie sicherstellen, dass die folgenden Logger weiterhin mit INFO protokollieren. Dies ist erforderlich, da die Ausgabe von DEBUG sehr ausführlich ist, was erhebliche Auswirkungen auf die Performance haben kann.

    • net.snowflake.ingest.internal.apache.parquet

    • org.apache.parquet