Katalogintegration für Iceberg-Tabellen konfigurieren

Unter diesem Thema finden Sie die erforderlichen Informationen zum Erstellen und Konfigurieren einer Katalogintegration für Iceberg-Tabellen. Um eine Iceberg-Tabelle zu erstellen, die einen externen Iceberg-Katalog oder gar keinen Katalog verwendet, müssen Sie eine Katalogintegration angeben.

Bemerkung

Eine Katalogintegration ist nur dann erforderlich, wenn Sie eine schreibgeschützte Iceberg-Tabelle unter Verwendung eines externen Iceberg-Katalogs erstellen möchten. Sie benötigen keine Katalogintegration, um eine Iceberg-Tabelle zu erstellen, die Snowflake als Iceberg-Katalog verwendet. Um Snowflake als Katalog zu verwenden, setzen Sie den Parameter CATALOG im Befehl CREATE ICEBERG TABLE auf SNOWFLAKE.

Katalogintegration erstellen

Sie können eine Katalogintegration für Iceberg-Tabellen erstellen, indem Sie den Befehl CREATE CATALOG INTEGRATION verwenden.

Beispiel: Katalogintegration für Iceberg-Dateien im Objektspeicher erstellen

Mit der folgenden Beispielanweisung wird eine Katalogintegration für Iceberg-Metadaten erstellt, die sich an einem externen Cloudspeicherort befinden, indem OBJECT_STORE als CATALOG_SOURCE-Wert festgelegt wird.

CREATE OR REPLACE CATALOG INTEGRATION icebergCatalogInt
  CATALOG_SOURCE=OBJECT_STORE
  TABLE_FORMAT=ICEBERG
  ENABLED=TRUE;
Copy

Nachdem Sie eine Katalogintegration erstellt haben, können Sie eine Iceberg-Tabelle erstellen.

Katalogintegration für AWS Glue konfigurieren

In diesem Abschnitt wird beschrieben, wie Sie eine Katalogintegration für AWS Glue erstellen und Snowflake eingeschränkten Zugriff auf den Amazon Glue-Datenkatalog gewähren können.

Bemerkung

Um die Anweisungen in diesem Abschnitt auszuführen, müssen Sie in Amazon Web Services (AWS) die Berechtigung zum Erstellen und Verwalten von IAM-Richtlinien und -Rollen haben. Wenn Sie kein AWS-Administrator sind, bitten Sie Ihren AWS-Administrator, diese Aufgaben auszuführen.

Schritt 1: Zugriffsberechtigungen für den AWS Glue-Datenkatalog konfigurieren

Als bewährte Methode sollten Sie für den Zugriff auf den Glue-Datenkatalog eine neue IAM-Richtlinie für Snowflake erstellen. Sie können dann die Richtlinie in die IAM-Rolle einbinden und die von AWS für diese Rolle generierten Sicherheitsanmeldeinformationen verwenden, um auf Dateien im Katalog zuzugreifen. Eine Anleitung dazu finden Sie unter Erstellen von IAM-Richtlinien und Ändern von Rollenberechtigungsrichtlinien im AWS-Benutzerhandbuch für die Identitäts- und Zugriffsverwaltung.

Snowflake benötigt mindestens die folgenden Berechtigungen für den Glue-Datenkatalog, um über Tabellen auf Informationen zuzugreifen.

  • glue:GetTable

  • glue:GetTables

Die folgende Beispielrichtlinie (im JSON-Format) bietet die erforderlichen Berechtigungen für den Zugriff auf alle Tabellen in einer bestimmten Datenbank.

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "AllowGlueCatalogTableAccess",
         "Effect": "Allow",
         "Action": [
            "glue:GetTable",
            "glue:GetTables"
         ],
         "Resource": [
            "arn:aws:glue:*:<accountid>:table/*/*",
            "arn:aws:glue:*:<accountid>:catalog",
            "arn:aws:glue:*:<accountid>:database/<database-name>"
         ]
      }
   ]
}
Copy

Bemerkung

  • Sie können das Resource-Element dieser Richtlinie ändern, um die zulässigen Ressourcen weiter einzuschränken (z. B. Katalog, Datenbanken oder Tabellen). Weitere Informationen dazu finden Sie unter Von AWS Glue definierte Ressourcentypen

  • Wenn Sie die Verschlüsselung für AWS Glue verwenden, müssen Sie die Richtlinie ändern, um AWS-KMS-Berechtigungen (AWS Key Management Service) hinzuzufügen. Weitere Informationen dazu finden Sie unter Einrichten der Verschlüsselung in AWS Glue.

Schritt 2: Katalogintegration in Snowflake erstellen

Erstellen Sie mit dem Befehl CREATE CATALOG INTEGRATION eine Katalogintegration für den Glue-Datenkatalog.

Im folgenden Beispiel wird eine Katalogintegration erstellt, die eine AWS Glue-Katalogquelle verwendet. Das Beispiel gibt einen Wert für den optionalen Parameter GLUE_REGION an.

CREATE CATALOG INTEGRATION glueCatalogInt
   CATALOG_SOURCE=GLUE
   CATALOG_NAMESPACE='my.catalogdb'
   TABLE_FORMAT=ICEBERG
   GLUE_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/myGlueRole'
   GLUE_CATALOG_ID='123456789012'
   GLUE_REGION='us-east-2'
   ENABLED=TRUE;
Copy

Schritt 3: AWS-IAM-Benutzer und externe ID für Ihr Snowflake-Konto abrufen

Um Informationen zu dem AWS-IAM-Benutzer und die externe ID abzurufen, die für Ihr Snowflake-Konto erstellt wurden, als Sie die Katalogintegration erstellt haben, führen Sie den Befehl DESCRIBE CATALOG INTEGRATION aus. Sie geben diese Informationen im nächsten Abschnitt an AWS weiter, um eine Vertrauensstellung einzurichten.

Der folgende Beispielbefehl beschreibt die im vorherigen Schritt erstellte Katalogintegration:

DESCRIBE CATALOG INTEGRATION glueCatalogInt;
Copy

Notieren Sie die folgenden Werte:

Wert

Beschreibung

GLUE_AWS_IAM_USER_ARN

Der AWS-IAM-Benutzer, der für Ihr Snowflake-Konto erstellt wurde, in diesem Beispiel arn:aws:iam::123456789001:user/abc1-b-self1234. Snowflake stellt genau einen IAM-Benutzer für Ihr gesamtes Snowflake-Konto bereit. Alle Glue-Katalogintegrationen in Ihrem Konto verwenden diesen IAM-Benutzer.

GLUE_AWS_EXTERNAL_ID

Die externe ID, die zum Herstellen einer vertrauenswürdigen Beziehung erforderlich ist.

Diese Werte werden Sie im nächsten Abschnitt angeben.

Schritt 4: IAM-Benutzerberechtigungen für den Zugriff auf den AWS Glue-Datenkatalog erteilen

Aktualisieren Sie die Vertrauensrichtlinie für die gleiche IAM-Rolle, die Sie beim Erstellen der Katalogintegration mit dem ARN angegeben haben (GLUE_AWS_ROLE_ARN). Fügen Sie die Werte, die Sie sich in Schritt 3: AWS-IAM-Benutzer und externe ID für Ihr Snowflake-Konto abrufen notiert haben, der Vertrauensrichtlinie hinzu.

Eine Anleitung dazu finden Sie unter Ändern einer Vertrauensrichtlinie.

Das folgende Beispiel einer Vertrauensrichtlinie zeigt, wo die Werte GLUE_AWS_IAM_USER_ARN und GLUE_AWS_EXTERNAL_ID angegeben werden müssen:

{
   "Version": "2012-10-17",
   "Statement": [
      {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
         "AWS": "<glue_iam_user_arn>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
         "StringEquals": {
            "sts:ExternalId": "<glue_aws_external_id>"
         }
      }
      }
   ]
}
Copy

Wobei:

  • glue_iam_user_arn ist der Wert GLUE_IAM_USER_ARN, den Sie erfasst haben.

  • glue_aws_external_id ist der Wert GLUE_AWS_EXTERNAL_ID, den Sie erfasst haben.

Bemerkung

  • Wenn Sie aus Sicherheitsgründen eine neue Katalogintegration erstellen (oder eine vorhandene Katalogintegration mit der Syntax CREATE OR REPLACE CATALOG INTEGRATION neu erstellen), hat die neue Katalogintegration eine andere externe ID und kann die Vertrauensstellung nicht auflösen, es sei denn, Sie ändern die Vertrauensrichtlinie mit der neuen externen ID.

  • Um zu überprüfen, ob Ihre Berechtigungen korrekt konfiguriert sind, erstellen Sie eine Iceberg-Tabelle unter Verwendung dieser Katalogintegration. Snowflake prüft erst dann, ob Ihre Berechtigungen korrekt eingestellt sind, wenn Sie eine Iceberg-Tabelle erstellen, die auf diese Katalogintegration verweist.

Nächste Schritte

Nachdem Sie eine Katalogintegration für AWS Glue konfiguriert haben, können Sie mit Erstellen Sie eine Iceberg-Tabelle mit AWS Glue als Katalog fortfahren.

Um die Tabelle zu aktualisieren und sie mit Änderungen in AWS Glue synchron zu halten, verwenden Sie eine ALTER ICEBERG TABLE … REFRESH-Anweisung. Weitere Informationen dazu finden Sie unter Metadaten einer Iceberg-Tabelle aktualisieren, die AWS Glue als Katalog verwendet.

Katalogintegration auf Konto-, Datenbank- oder Schemaebene einstellen

Um zu definieren, welche vorhandene Katalogintegration für Iceberg-Tabellen verwendet werden soll, können Sie den Parameter CATALOG auf den folgenden Ebenen einstellen:

Konto:

Kontoadministratoren können mit dem Befehl ALTER ACCOUNT die Parameter für das Konto festlegen. Wenn der Wert für das Konto festgelegt ist, verwenden alle Iceberg-Tabellen, die im Konto erstellt wurden und einen externen Katalog verwenden, standardmäßig diese Katalogintegration.

Objekt:

Benutzer können den entsprechenden CREATE <Objekt>- oder ALTER <Objekt>-Befehl ausführen, um den Parameterwert von CATALOG auf Datenbank- oder Schema-Ebene zu überschreiben. Es wird die Deklaration mit dem kleinsten Geltungsbereich verwendet: Schema > Datenbank > Konto.

Zusätzlich zu den Mindestberechtigungen, die für das Ändern eines Objekts mit dem entsprechenden ALTER <Objekttyp>-Befehl erforderlich sind, muss eine Rolle die USAGE-Berechtigung für die Katalogintegration haben.

Beispiel

Mit der folgenden Anweisung wird eine Katalogintegration (shared_catalog_integration) für eine Datenbank namens my_database_1 festgelegt:

ALTER DATABASE my_database_1
  SET CATALOG = 'shared_catalog_integration';
Copy

Nachdem Sie eine Katalogintegration auf Datenbankebene festgelegt haben, können Sie eine Iceberg-Tabelle in dieser Datenbank erstellen, ohne eine Katalogintegration angeben zu müssen. Mit der folgenden Anweisung wird eine Iceberg-Tabelle aus Metadaten im Objektspeicher in my_database_1 erstellt, die die für die Datenbank festgelegte Standard-Katalogintegration (shared_catalog_integration) verwendet.

CREATE ICEBERG TABLE my_iceberg_table
   EXTERNAL_VOLUME='my_external_volume'
   METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy