Vorbereiten des Ladens von Daten über die Snowpipe REST-API

Unter diesem Thema wird beschrieben, wie Sie mit Snowpipe beim Aufruf der REST-API beginnen, einschließlich Anweisungen zur Installation des gewünschten Client-SDK, zum Erstellen eines Stagingbereichs (falls erforderlich) und einer Pipe sowie der einmaligen Sicherheitseinrichtung für jeden Snowpipe-Benutzer.

Unter diesem Thema:

Bemerkung

Bei den Anweisungen in diesem Abschnitt wird davon ausgegangen, dass Sie bereits eine Zieltabelle in Ihrer Snowflake-Datenbank haben, in die Ihre Daten geladen werden.

Clientanforderung (Java- oder Python-SDK)

Für den Snowpipe-Service ist entweder das Java-SDK oder das Python-SDK erforderlich. Diese SDKs werden von Snowflake bereitgestellt.

Wichtig

Die Binärdateien werden als Clientsoftware im Rahmen Ihres Master Service Agreements (MSA, Dienstleistungsrahmenvertrag) mit Snowflake bereitgestellt.

Installation des Java-SDK

  1. Laden Sie das Java-SDK-Installationsprogramm aus dem Maven Central Repository herunter:

    http://search.maven.org/ (oder https://repo1.maven.org/maven2/net/snowflake/snowflake-ingest-sdk)

  2. Integrieren Sie die JAR-Datei in ein bestehendes Projekt.

Bemerkung

Die Entwicklerhinweise werden mit dem Quellcode auf GitHub gehostet.

Installieren des Python-SDK

Beachten Sie, dass das Python-SDK Python 3.6 oder höher erfordert.

Führen Sie den folgenden Befehl aus, um das SDK zu installieren:

pip install snowflake-ingest

Laden Sie alternativ die Wheel-Datei von PyPI herunter und integrieren Sie sie in ein vorhandenes Projekt.

Bemerkung

Die Entwicklerhinweise werden mit dem Quellcode auf GitHub gehostet.

Schritt 1: Stagingbereich erstellen (falls erforderlich)

Snowpipe unterstützt das Laden aus den folgenden Stagingbereichstypen:

  • Benannte interne (Snowflake) oder externe (Amazon S3, Google Cloud Storage oder Microsoft Azure) Stagingbereiche

  • Tabellen-Stagingbereiche

Erstellen Sie einen benannten Stagingbereich mit dem Befehl CREATE STAGE, oder verwenden Sie einen vorhandenen Stagingbereich. Sie stellen Ihre Dateien vorübergehend im Stagingbereich bereit, bevor Snowpipe sie in Ihre Zieltabelle lädt.

Schritt 2: Pipe erstellen

Erstellt eine neue Pipe im System zum Definieren der COPYINTO <Tabelle>-Anweisung, die von Snowpipe zum Laden von Daten aus einer Erfassungswarteschlange in Tabellen verwendet wird. Weitere Informationen dazu finden Sie unter CREATE PIPE.

Bemerkung

Das Erstellen einer Pipe erfordert die Zugriffssteuerungsberechtigung CREATE PIPE sowie die Berechtigung USAGE für Datenbank, Schema und Stagingbereich.

Erstellen Sie beispielsweise im mydb.myschema-Schema eine Pipe, die alle Daten aus den im mystage-Stagingbereich bereitgestellten Dateien in die mytable-Tabelle lädt:

create pipe mydb.myschema.mypipe if not exists as copy into mydb.myschema.mytable from @mydb.myschema.mystage;

Schritt 3: Sicherheit konfigurieren (pro Benutzer)

Für jeden Benutzer, der kontinuierliches Laden von Daten mit Snowpipe durchführt, generieren Sie ein öffentlich-privates Schlüsselpaar für Aufrufe von Snowpipe-REST-Endpunkten. Vergeben Sie außerdem ausreichende Berechtigungen an den Objekten für das Laden von Daten (d. h. Zieldatenbank, Schema und Tabelle), das Stagingobjekt und die Pipe.

Wenn Sie das Snowpipe-Datenladen auf einen einzelnen Benutzer beschränken möchten, müssen Sie die Schlüsselpaar-Authentifizierung für den Benutzer nur einmal konfigurieren. Danach müssen Sie nur noch Zugriffssteuerungsrechte für die Datenbankobjekte vergeben, die für jede Datenladeoperation verwendet werden.

Bemerkung

Um dem allgemeinen Prinzip der geringsten Berechtigungen zu folgen, empfehlen wir, einen separaten Benutzer und eine eigene Rolle für die Aufnahme von Dateien über eine Pipe zu erstellen. Der Benutzer sollte mit dieser Rolle als Standardrolle erstellt werden.

Verwenden von Schlüsselpaar-Authentifizierung und Schlüsselrotation

Snowflake unterstützt die Verwendung von Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation.

Die Schlüsselpaar-Authentifizierung ist eine Authentifizierungsoption für unterstützte Snowflake-Clients.

Die Schlüsselpaar-Rotation bietet eine erhöhte Sicherheit des Schlüsselpaares.

Weitere Informationen zur Konfiguration dieser Funktionen finden Sie unter Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation.

Erteilen von Zugriffsrechten

Die Verwendung von Snowpipe erfordert eine Rolle mit den folgenden Berechtigungen:

Objekt

Berechtigung

Anmerkungen

Benannte Pipe

OWNERSHIP

Benannter Stagingbereich

USAGE (externer Stagingbereich), READ (interner Stagingbereich)

Benanntes Dateiformat

USAGE

Optional; nur erforderlich, wenn entweder der Stagingbereich (siehe Schritt 1: Stagingbereich erstellen (falls erforderlich)) oder die Pipe (siehe Schritt 2: Pipe erstellen) auf ein benanntes Dateiformat verweist.

Zieldatenbank

USAGE

Zielschema

USAGE

Zieltabelle

INSERT , SELECT

Verwenden Sie den Befehl GRANT <Berechtigungen> … TO ROLE, um der Rolle diese Berechtigungen zu erteilen.

Bemerkung

Nur Sicherheitsadministratoren (d. h. Benutzer mit der Rolle SECURITYADMIN oder höher) oder mit einer anderen Rolle, die sowohl die Berechtigung CREATE ROLE für das Konto als auch die globale Berechtigung MANAGE GRANTS besitzt, können Rollen erstellen und Berechtigungen erteilen.

Erstellen Sie beispielsweise eine Rolle mit dem Namen snowpipe1, die auf mydb.myschema-Datenbankobjekte sowie auf eine Pipe mit dem Namen mypipe zugreifen kann. Weisen Sie die Rolle einem Benutzer zu.

 -- Create a role to contain the Snowpipe privileges
use role securityadmin;

create or replace role snowpipe1;

-- Grant the required privileges on the database objects
grant usage on database mydb to role snowpipe1;

grant usage on schema mydb.myschema to role snowpipe1;

grant insert, select on mydb.myschema.mytable to role snowpipe1;

grant usage, read on stage mydb.myschema.mystage to role snowpipe1;

-- Grant the OWNERSHIP privilege on the pipe object
grant ownership on pipe mydb.myschema.mypipe to role snowpipe1;

-- Grant the role to a user
grant role snowpipe1 to user jsmith;

-- Set the role as the default role for the user
alter user jsmith set default_role = snowpipe1;

Schritt 4: Datendateien in Stagingbereich bereitstellen

Kopieren Sie Datendateien in den internen oder externen Stagingbereich, den Sie zum Laden von Dateien mit Snowpipe erstellt haben.

  • Kopieren Sie Dateien mit den vom Cloudspeicherdienst bereitgestellten Tools in einen externen Stagingbereich.

  • Kopieren Sie Dateien mit dem Befehl PUT in einen internen Stagingbereich.

    Bemerkung

    Wenn Ihr Snowflake-Konto bei Amazon Web Services gehostet wird, empfehlen wir immer die Verwendung der Syntax PUT … OVERWRITE = TRUE.

    Amazon S3 bietet Lesen-nach-Schreiben-Konsistenz für neue Objekte, die in einem Bucket erstellt werden. Wenn für ein Objekt jedoch eine HEAD- oder GET-Anforderung gesendet wird, bevor das Objekt erstellt wurde, bietet S3 Letztliche Konsistenz für das Objekt. Das bedeutet, dass eine sofortige Anforderung eines neuen Objekts nach dessen Erstellung eine file not found-Ausnahme zurückgeben könnte. Durch das Festlegen des Parameters OVERWRITE = TRUE wird die Initiierung einer HEAD-Anforderung vor dem Erstellen des Objekts im S3-Bucket verhindert.

    Weitere Informationen zum S3-Konsistenzmodell finden Sie in der S3-Dokumentation.

Nächstes Thema: Unter Aufrufen von Snowpipe-REST-Endpunkten zum Laden von Daten erfahren Sie, wie Sie die öffentlichen REST-Endpunkte zum Laden von Daten und zum Abrufen von Berichten über den Ladeverlauf aufrufen.