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.

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: