Konfigurieren einer internen Postgres-Speicherintegration für Snowflake Postgres

Eine interne Snowflake Postgres-Speicherintegration ermöglicht es Ihnen, in dem verwalteten Speicher zu lesen und zu schreiben, der mit einer Snowflake Postgres-Instanz verbunden ist. Dieses Feature ermöglicht nahtlose Datenbewegungen zwischen Snowflake und Ihren Postgres-Instanzen über einen externen Stagingbereich. Die vollständige SQL-Syntax finden Sie unter CREATE STORAGE INTEGRATION (Postgres Internal Storage).

Postgres-Instanzen in Snowflake verfügen über verwalteten Speicher, der von der Postgres-Instanz zugewiesen wird. Während Benutzer bereits auf diesen Speicher zugreifen können, um Dateien über Iceberg-Tabellen mit einer Snowflake Postgres-Katalogintegration zu lesen, bietet eine Speicherintegration einen Pfad zum Schreiben von Daten aus Snowflake in den von Postgres verwalteten Bucket.

Bemerkung

Interne Postgres-Speicherintegrationen werden derzeit nur auf AWS und Azure unterstützt.

Voraussetzungen

  • Ein Snowflake-Konto mit aktiviertem Snowflake-Postgres-Feature.

  • Eine Postgres-Instanz mit dem Status READY. Um eine Postgres-Instanz zu erstellen, siehe CREATE POSTGRES INSTANCE.

  • Die Rolle, die die Speicherintegration erstellt, muss über die folgenden Berechtigungen verfügen:

    • OWNERSHIP für die Postgres-Instanz.

    • CREATE INTEGRATION für das Konto.

Hinweise

Beachten Sie Folgendes, wenn Sie eine interne Postgres-Speicherintegration verwenden:

  • Unterstützung von Cloudanbietern: Dieses Feature unterstützt derzeit nur AWS und Azure.

  • Stagingeinschränkungen: Beim Erstellen eines Stagingbereichs (siehe CREATE STAGE), der eine interne Postgres-Speicherintegration verwendet, sind die Stagingbereichseigenschaften URL, ENCRYPTION und DIRECTORY nicht zulässig.

  • Pfadkonfiguration: Die Integration hängt automatisch einen /files-Unterpfad zum Basisspeicherort an, der von der Postgres-Instanz abgerufen wird.

Erstellen einer Speicherintegration für internen Postgres-Speicher

Um eine Speicherintegration für internen Postgres-Speicher zu erstellen, verwenden Sie den Befehl CREATE STORAGE INTEGRATION (Postgres Internal Storage) mit TYPE = POSTGRES_INTERNAL_STORAGE.

Beispiel:

CREATE STORAGE INTEGRATION postgres_internal
  TYPE = POSTGRES_INTERNAL_STORAGE
  POSTGRES_INSTANCE = 'my_pg_instance';

Wobei:

  • TYPE = POSTGRES_INTERNAL_STORAGE: Gibt den Integrationstyp für den von Postgres verwalteten Speicher an. Erforderlich.

  • POSTGRES_INSTANCE = '<instance_name>': Gibt den Namen der Snowflake Postgres-Instanz an. Erforderlich.

Die vollständige Syntax- und Parameterreferenz finden Sie unter CREATE STORAGE INTEGRATION (Postgres Internal Storage).

Erstellen eines Stagingbereichs für den Postgres-Speicher

Nachdem Sie die Integration erstellt haben, können Sie einen externen Stagingbereich erstellen, um mit dem Speicher zu interagieren. Verwenden Sie die RELATIVE_URL-Eigenschaft, um ein vom Benutzer gewähltes Pfadpräfix unter dem verwalteten Postgres-Speicher anzugeben, auf den dieser Stagingbereich verweisen soll. Dieser Wert ist ein beliebiger Pfad, den Sie definieren, um Dateien innerhalb des verwalteten Speicherorts zu organisieren.

Beispiel:

CREATE STAGE my_pg_stage
  STORAGE_INTEGRATION = postgres_internal
  RELATIVE_URL = '/test_parquet';

Verschieben von Daten zwischen Snowflake und Postgres

Sie können den Befehl COPY FILES zum Verschieben von Daten zwischen Snowflake-Stagingbereichen und Ihrem verwalteten Postgres-Speicher verwenden. Diese Beispiele gehen davon aus, dass Sie zusätzlich zu dem oben erstellten Postgres-Stagingbereich bereits einen separaten Snowflake-Stagingbereich erstellt haben.

Snowflake zu Postgres (Schreiben)

So verschieben Sie Daten aus einem bestehenden Snowflake-Stagingbereich in den von Postgres verwalteten Speicher:

COPY FILES
  INTO @<postgres_stage>
  FROM @<source_stage>;

Wobei <source_stage> sich auf einen bereits vorhandenen Snowflake-Stagingbereich bezieht, der die Dateien enthält, die Sie verschieben möchten, und <postgres_stage> der im vorherigen Schritt erstellte Postgres-Stagingbereich ist.

Auf der Postgres-Seite können Sie dann die Daten laden:

COPY test FROM '@STAGE/test_parquet/data*.parquet';

Wobei @STAGE ein vorkonfigurierter Platzhalter für den Speicherort des Stagingbereichs auf der Postgres-Seite ist.

Postgres zu Snowflake (Lesen)

So verschieben Sie von Postgres geschriebene Daten zurück in einen bestehenden Snowflake-Stagingbereich:

COPY FILES
  INTO @<destination_stage>
  FROM @<postgres_stage>;

Wobei <destination_stage> sich auf einen bereits vorhandenen Snowflake-Stagingbereich bezieht, in den Sie die Dateien kopieren möchten, und <postgres_stage> der zuvor erstellte Postgres-Stagingbereich ist.

Zugriffssteuerung

Es gilt das Standard-Berechtigungsmodell für die Snowflake-Speicherintegration:

  • Eigentümerschaft: Die Rolle, die die Integration erstellt, muss Eigentümer der zugehörigen Postgres-Instanz sein.

  • Verwendung: Um die Integration zum Erstellen eines Stagingbereichs zu verwenden, muss eine Rolle die USAGE-Berechtigung für das Integrationsobjekt haben.

  • Berechtigungen für Stagingbereiche: Benutzer benötigen Standardberechtigungen (z. B. READ, WRITE) für den Stagingbereich selbst, um Datenbewegungsoperationen auszuführen.

So erteilen Sie beispielsweise einer anderen Rolle die Berechtigung, Stagingbereiche unter Verwendung der Speicherintegration zu erstellen:

GRANT USAGE ON INTEGRATION postgres_internal TO ROLE data_engineer_role;