Einführung in Snowpipe¶
Snowpipe ermöglicht das Laden von Daten aus Dateien, sobald diese in einem Stagingbereich verfügbar sind. Das bedeutet, dass Sie Daten aus Dateien in Microbatches laden und sie den Benutzern innerhalb von Minuten zur Verfügung stellen können, anstatt COPY-Anweisungen manuell nach einem Zeitplan auszuführen, um größere Batches zu laden.
Unter diesem Thema:
So funktioniert Snowpipe¶
Snowpipe lädt Daten aus Dateien, sobald sie in einem Stagingbereich verfügbar sind. Die Daten werden gemäß der in einer referenzierten Pipe definierten COPY-Anweisung geladen.
Eine Pipe ist ein benanntes First-Class-Objekt von Snowflake, das eine COPY-Anweisung enthält, die von Snowpipe verwendet wird. Die COPY-Anweisung identifiziert den Quellort der Datendateien (d. h. einen Stagingbereich) und eine Zieltabelle. Es werden alle Datentypen unterstützt, einschließlich semistrukturierter Datentypen wie JSON und Avro.
Es gibt verschiedene Mechanismen zum Erkennen der verfügbaren Stagingdateien:
Automatisieren von Snowpipe mithilfe von Cloudmessaging
Aufrufen von Snowpipe-REST-Endpunkten
Automatisieren von Snowpipe mithilfe von Cloudmessaging¶
Beim automatischen Laden von Daten werden für Cloudspeicher Ereignisbenachrichtigungen verwendet, um Snowpipe über das Eintreffen neuer zu ladender Datendateien zu informieren. Snowpipe kopiert die Dateien in eine Warteschlange, aus der sie auf Grundlage der in einem angegebenen Pipeobjekt definierten Parameter kontinuierlich und ohne Server in die Zieltabelle geladen werden.
Unterstützte Cloudspeicherdienste¶
In der folgenden Tabelle sind die unterstützten Cloudspeicherdienste für automatisiertes Snowpipe von Snowflake-Konten aufgeführt, die auf der jeweiligen Cloudplattform gehostet werden:
Host des Snowflake-Kontos |
Amazon S3 |
Google Cloud Storage |
Microsoft Azure Blob-Speicher |
Microsoft Data Lake Storage Gen2 |
Microsoft Azure General Purpose v2 |
---|---|---|---|---|---|
Amazon Web Services |
✔ |
✔ |
✔ |
✔ |
✔ |
Google Cloud Platform |
❌ |
✔ |
❌ |
❌ |
❌ |
Microsoft Azure |
❌ |
❌ |
✔ |
✔ |
✔ |
Wie die Tabelle zeigt, ist die cloudunabhängige Unterstützung derzeit nur für Konten verfügbar, die auf Amazon Web Services gehostet werden.
Weitere Informationen dazu finden Sie unter Automatisieren des kontinuierlichen Ladens von Daten mithilfe von Cloudmessaging.
Wichtig
Snowflake empfiehlt die Aktivierung der Cloudereignisfilterung für Snowpipe, um Kosten, Ereignisrauschen und Latenz zu reduzieren. Weitere Informationen zum Konfigurieren der Ereignisfilterung für jeden Cloudanbieter finden Sie auf den folgenden Seiten:
Aufrufen von Snowpipe-REST-Endpunkten¶
Ihre Clientanwendung ruft einen öffentlichen REST-Endpunkt mit dem Namen eines Pipeobjekts und einer Liste von Datendateinamen auf. Wenn in dem Stagingbereich neue Datendateien gefunden werden, die der Liste entsprechen, werden sie zum Laden in die Warteschlange gestellt. Von Snowflake bereitgestellte Computeressourcen laden basierend auf in der Pipe definierten Parametern Daten aus der Warteschlange in eine Snowflake-Tabelle.
Unterstützte Cloudspeicherdienste¶
In der folgenden Tabelle sind die unterstützten Cloudspeicherdienste für Snowpipe REST API-Aufrufe von Snowflake-Konten aufgeführt, die auf der jeweiligen Cloudplattform gehostet werden:
Host des Snowflake-Kontos |
Amazon S3 |
Google Cloud Storage |
Microsoft Azure Blob-Speicher |
Microsoft Data Lake Storage Gen2 |
Microsoft Azure General Purpose v2 |
---|---|---|---|---|---|
Amazon Web Services |
✔ |
✔ |
✔ |
✔ |
✔ |
Google Cloud Platform |
✔ |
✔ |
✔ |
✔ |
✔ |
Microsoft Azure |
✔ |
✔ |
✔ |
✔ |
✔ |
Weitere Informationen dazu finden Sie unter Aufrufen von Snowpipe-REST-Endpunkten zum Laden von Daten.
Wie unterscheidet sich Snowpipe vom Massenladen von Daten?¶
In diesem Abschnitt werden kurz die wesentlichen Unterschiede zwischen Snowpipe und einem Ladeworkflow für Massenladen mit dem COPY-Befehl beschrieben. Weitere Details sind in der gesamten Snowpipe-Dokumentation enthalten.
Authentifizierung¶
- Laden von Massendaten
Basiert auf den vom Client unterstützten Sicherheitsoptionen zum Authentifizieren und Initiieren einer Benutzersitzung.
- Snowpipe
Bei Aufruf der REST-Endpunkte: Erfordert Schlüsselpaar-Authentifizierung mit JSON Web Token (JWT). JWTs werden mit einem Public/Private-Schlüsselpaar mit RSA-Verschlüsselung signiert.
Ladeverlauf¶
- Laden von Massendaten
In den Metadaten für die Zieltabelle 64 Tage lang gespeichert. Verfügbar nach Abschluss der COPY-Anweisung als Ausgabe der Anweisung.
- Snowpipe
In den Metadaten für die Pipe 14 Tage lang gespeichert. Muss von Snowflake über einen REST-Endpunkt, eine SQL-Tabellenfunktion oder eine ACCOUNT_USAGE-Ansicht angefordert werden.
Wichtig
Um ein erneutes Laden von Dateien (und das Duplizieren von Daten) zu vermeiden, empfehlen wir, Daten aus einem bestimmten Satz von Dateien mit entweder Massendaten oder Snowpipe zu laden, jedoch nicht mit beiden.
Transaktionen¶
- Laden von Massendaten
Ladevorgänge werden immer in einer einzigen Transaktion ausgeführt. Daten werden zusammen mit anderen SQL-Anweisungen, die von Benutzern manuell übermittelt wurden, in die Tabelle eingefügt.
- Snowpipe
Lasten werden basierend auf der Anzahl und Größe der Zeilen in jeder Datendatei kombiniert oder in eine oder mehrere Transaktionen aufgeteilt. Zeilen von teilweise geladenen Dateien (basierend auf der Einstellung der Kopieroption ON_ERROR) können auch kombiniert oder in eine oder mehrere Transaktionen aufgeteilt werden.
Computeressourcen¶
- Laden von Massendaten
Erfordert ein benutzerdefiniertes Warehouse, um COPY-Anweisungen auszuführen.
- Snowpipe
Verwendet von Snowflake bereitgestellte Computeressourcen.
Kosten¶
- Laden von Massendaten
Wird für die Zeit berechnet, die jedes virtuelle Warehouse aktiv ist.
- Snowpipe
Die Abrechnung erfolgt nach den im Snowpipe-Warehouse verwendeten Computeressourcen beim Laden der Dateien.
Empfohlene Ladedateigröße¶
Für ein möglichst effizientes und kostengünstiges Laden mit Snowpipe empfehlen wir, die Empfehlungen zur Dateigrößeneinstellung in Best Practices und Einschränkungen für Dateigrößen zu befolgen und Stagingdateien einmal pro Minute bereitzustellen. Dieser Ansatz führt in der Regel zu einem ausgewogenen Verhältnis zwischen Kosten (d. h. Ressourcen, die für die Verwaltung der Snowpipe-Warteschlange und den eigentlichen Ladevorgang benötigt werden) und Leistung (d. h. Latenzzeit beim Laden). Weitere Informationen dazu finden Sie unter Kontinuierliches Laden von Daten (d. h. Snowpipe) und Dateigrößen.
Ladereihenfolge der Datendateien¶
Für jedes Pipe-Objekt erstellt Snowflake eine separate Warteschlange, um Datendateien zu sequenzieren, die auf das Laden warten. Wenn neue Datendateien in einem Stagingbereich erkannt werden, hängt Snowpipe sie an die Warteschlange an. Bei mehreren Prozessen werden jedoch Dateien aus der Warteschlange abgerufen. Während Snowpipe im Allgemeinen ältere Dateien zuerst lädt, gibt es keine Garantie, dass Dateien in derselben Reihenfolge geladen werden, in der sie bereitgestellt wurden.
Datenkopien¶
Snowflake verwendet Metadaten zum Laden von Dateien, die jedem Pipe-Objekt zugeordnet sind, um das erneute Laden derselben Dateien (und das Duplizieren von Daten) in einer Tabelle zu verhindern. Diese Metadaten speichern den Pfad (d. h. das Präfix) und den Namen jeder geladenen Datei und verhindern, dass Dateien mit demselben Namen geladen werden, auch wenn sie später geändert wurden (d. h. sie haben ein anderes ETag).
Abschätzen der Snowpipe-Latenz¶
Angesichts der Vielzahl von Faktoren, die Snowpipe-Workloads beeinflussen können, ist es für Snowflake sehr schwierig, die Latenz abzuschätzen. Dateiformate und -größen sowie die Komplexität der COPY-Anweisungen (einschließlich der SELECT-Anweisung, die für Transformationen verwendet wird) wirken sich auf die für das Laden einer Snowpipe erforderliche Zeit aus.
Wir empfehlen, dass Sie experimentieren, indem Sie einen typischen Satz von Workloads ausführen, um die durchschnittliche Latenz abzuschätzen.
Pipe-Sicherheit¶
Zugriffssteuerungsrechte¶
Erstellen von Pipes¶
Das Erstellen und Verwalten von Pipes erfordert eine Rolle mit mindestens den folgenden Berechtigungen:
Objekt |
Berechtigung |
Anmerkungen |
---|---|---|
Datenbank |
USAGE |
|
Schema |
USAGE, CREATE PIPE |
|
Stagingbereich in der Pipe-Definition |
USAGE |
Nur für externe Stagingbereiche |
Stagingbereich in der Pipe-Definition |
READ |
Nur für interne Stagingbereiche |
Tabelle in der Pipe-Definition |
SELECT, INSERT |
Besitzen von Pipes¶
Nachdem eine Pipe erstellt wurde, muss der Pipe-Eigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für die Pipe) über die folgenden Berechtigungen verfügen:
Objekt |
Berechtigung |
Anmerkungen |
---|---|---|
Datenbank |
USAGE |
|
Schema |
USAGE |
|
Pipe |
OWNERSHIP |
|
Stagingbereich in der Pipe-Definition |
USAGE |
Nur für externe Stagingbereiche |
Stagingbereich in der Pipe-Definition |
READ |
Nur für interne Stagingbereiche |
Tabelle in der Pipe-Definition |
SELECT, INSERT |
Anhalten und Fortsetzen von Pipes¶
Zusätzlich zum Pipe-Eigentümer kann eine Rolle, die über die folgenden Mindestberechtigungen verfügt, die Pipe anhalten oder fortsetzen:
Objekt |
Berechtigung |
Anmerkungen |
---|---|---|
Datenbank |
USAGE |
|
Schema |
USAGE |
|
Pipe |
OPERATE |
|
Stagingbereich in der Pipe-Definition |
USAGE |
Nur für externe Stagingbereiche |
Stagingbereich in der Pipe-Definition |
READ |
Nur für interne Stagingbereiche |
Tabelle in der Pipe-Definition |
SELECT, INSERT |
Snowpipe DDL¶
Um das Erstellen und Verwalten von Pipes zu unterstützen, bietet Snowflake den folgenden Satz von speziellen DDL-Befehlen:
Darüber hinaus können Anbieter den Zugriff auf die für Snowpipe erforderlichen Datenbankobjekte mit der folgenden DDL-Standardzugriffssteuerung anzeigen, gewähren oder widerrufen: