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 SieOnErrorOption
aufOnErrorOption.CONTINUE
und überprüfen Sie manuell den Rückgabewert voninsertRows
auf mögliche Erfassungsfehler. Dieser Ansatz führt derzeit zu einer besseren Performance als der Rückgriff auf Ausnahmen, die bei Verwendung vonOnErrorOption.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 voninsertRow
, 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