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
Automatische Datenladevorgänge nutzen Ereignisbenachrichtigungen für Cloudspeicher, um Snowpipe über das Eintreffen neuer zu ladender Datendateien zu informieren. Snowpipe fragt die Ereignisbenachrichtigungen aus einer Warteschlange ab. Unter Verwendung der Metadaten in der Warteschlange lädt Snowpipe die neuen Datendateien auf Basis der in einem bestimmten Pipeobjekt definierten Parameter kontinuierlich und serverlos in die Zieltabelle.
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 automatisiertes Aufrufe von Snowpipe und Snowpipe-REST-API 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 Automatisieren des kontinuierlichen Ladens von Daten mithilfe von Cloudmessaging und Übersicht zu Snowpipe-REST-Endpunkten zum Laden von Daten.
Beachten Sie, dass in den von den Cloudanbietern bereitgestellten Regionen für Regierungsbehörden das Senden und Empfangen von Ereignisbenachrichtigungen an oder aus anderen kommerziellen Regionen nicht zulässig ist. Weitere Informationen dazu finden Sie unter AWS GovCloud (US) und Azure Government.
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:
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 |
Eigentümerschaft 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: