View a markdown version of this page

Referenzieren von Iceberg-Tabellen in Amazon Redshift - Amazon Redshift

Amazon Redshift unterstützt die Verwendung von Python-UDFs nach dem 30. Juni 2026 nicht mehr. Wir werden damit beginnen, es schrittweise durchzusetzen. Weitere Informationen zum Ende der Lebensdauer von Python und zu den Migrationsoptionen finden Sie im Blogbeitrag, der am 30. Juni 2025 veröffentlicht wurde.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Referenzieren von Iceberg-Tabellen in Amazon Redshift

Amazon Redshift bietet mehrere Möglichkeiten, auf Apache Iceberg-Tabellen zu verweisen, die in Ihrem Data Lake gespeichert sind. Sie können externe Schemas verwenden, um Verweise auf Datenkatalog-Datenbanken zu erstellen, die Iceberg-Tabellen enthalten, oder eine dreiteilige Notation für den direkten Zugriff auf automatisch gemountete Kataloge verwenden.

Verwenden externer Schemas zum Verweisen auf Iceberg-Tabellen

Externe Schemas bieten die Möglichkeit, von Amazon Redshift aus auf Tabellen in Ihrem Datenkatalog zu verweisen. Wenn Sie ein externes Schema erstellen, stellen Sie eine Verbindung zwischen Ihrer Amazon Redshift-Datenbank und einer bestimmten Datenkatalog-Datenbank her, die Ihre Iceberg-Tabellen enthält.

So erstellen Sie ein externes Schema für Iceberg-Tabellen:

CREATE EXTERNAL SCHEMA schema_name FROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::account-id:role/role-name';

Nachdem Sie das externe Schema erstellt haben, können Sie Iceberg-Tabellen mithilfe der zweiteiligen Notation abfragen:

SELECT * FROM schema_name.iceberg_table_name;

Sie können Iceberg-Tabellen auch mit lokalen Amazon Redshift-Tabellen verbinden:

SELECT r.customer_id, i.order_date, r.customer_name FROM local_customers r JOIN schema_name.iceberg_orders i ON r.customer_id = i.customer_id;

Verwendung der dreiteiligen Notation bei automatisch bereitgestellten Katalogen

Mit der dreiteiligen Notation können Sie direkt auf Tabellen in automatisch bereitgestellten Katalogen verweisen, ohne externe Schemas erstellen zu müssen. Diese Methode ist besonders nützlich, wenn Sie mit Amazon S3-Tabellen-Buckets arbeiten, die mit verknüpft sind. AWS Lake Formation Informationen zum Einrichten der automatischen Bereitstellung des Datenkatalogs finden Sie unter Vereinfachen des Zugriffs auf externe Objekte in Amazon Redshift mithilfe der automatischen Einbindung von. AWS Glue Data Catalog

Die Syntax für die dreiteilige Notation lautet:

"catalog_name".database_name.table_name

Um beispielsweise eine Iceberg-Tabelle in einem automatisch bereitgestellten Amazon S3-Tabellenkatalog abzufragen:

SELECT * FROM "my_table_bucket@s3tablescatalog".my_database.my_iceberg_table;

Weitere Informationen zur Integration von Amazon S3-Tabellen-Buckets mit Amazon Redshift finden Sie unter Integrieren von S3-Tabellen mit Amazon Redshift im Amazon S3-Benutzerhandbuch.

Sie können auch auf Tabellen im automatisch bereitgestellten Stammkatalog verweisen, der direkten Zugriff auf Datenbanken und Tabellen bietetawsdatacatalog, die in der folgenden Datenbank registriert sind: AWS Glue Data Catalog

SELECT * FROM awsdatacatalog.my_database.my_iceberg_table;

Weitere Informationen zur Verwendung des awsdatacatalog Stammkatalogs finden Sie unter Abfragen der AWS Glue Data Catalog im Amazon Redshift Management Guide und Managing Data Catalog Namespaces im Developer Guide. AWS Lake Formation

Sie können die USE Anweisung auch verwenden, um einen Standardkatalog und eine Standarddatenbank für Amazon S3-Tabellen-Buckets festzulegen:

USE "my_table_bucket@s3tablescatalog".my_database; SELECT * FROM my_iceberg_table;

So legen Sie einen Suchpfad für die Schemaauflösung mit Amazon S3-Tabellen-Buckets fest:

USE "my_table_bucket@s3tablescatalog"; SET search_path TO my_database; SELECT * FROM my_iceberg_table;
Anmerkung

Die USE Anweisungen und search_path werden nur unterstützt fürs3tablescatalog. Sie können nicht mit verwendet werdenawsdatacatalog. Verwenden Sie die vollständige dreiteilige Notationawsdatacatalog, um auf Tabellen zu verweisen.

Bewährte Methoden für die Referenzierung von Iceberg-Tabellen

Eine Apache Iceberg-Tabelle ist eine einzelne logische Entität, die aus mehreren Dateien besteht: einer Stamm-Metadatendatei (metadata.json), Manifestlisten, Manifestdateien und Datendateien (typischerweise .parquet). Die Stamm-Metadatendatei dient als Einstiegspunkt und enthält Verweise auf alle anderen Dateien, aus denen die Tabelle besteht. Wenn Sie Amazon Redshift Zugriff auf eine Iceberg-Tabelle gewähren, verwendet Amazon Redshift die Stamm-Metadatendatei, um alle referenzierten Datendateien zu ermitteln und zu lesen. Wenn Amazon Redshift Zugriff auf die Stamm-Metadatendatei hat, geht Amazon Redshift davon aus, dass auch Zugriff auf alle zugrunde liegenden Datendateien erforderlich ist. Dies entspricht dem Entwurf von Iceberg, bei dem der Zugriff auf Tabellenebene die vorgesehene Autorisierungseinheit ist.

Um die Abfrageleistung zu verbessern, speichert Amazon Redshift Iceberg-Metadatendateien (einschließlich der Stamm-Metadatendatei, der Manifestlisten und der Manifestdateien) im Arbeitsspeicher. Die Stamm-Metadatendatei (metadata.json) wird in einem konfigurierbaren Intervall (TTL) anhand von Amazon S3 erneut validiert. Nach Ablauf der TTL führt Amazon Redshift eine Amazon S3-HEAD-Anfrage für die Stamm-Metadatendatei durch, um zu überprüfen, ob die IAM-Rolle weiterhin Zugriff hat und dass die Datei nicht geändert wurde. Wenn die Berechtigungsprüfung fehlschlägt oder sich die Datei geändert hat, wird der zwischengespeicherte Eintrag gelöscht und die Metadaten werden erneut von Amazon S3 abgerufen. Da die Stamm-Metadatendatei der Einstiegspunkt für den gesamten Tabellenzugriff ist, dient diese erneute Überprüfung als Zugriffsrecht für die gesamte Tabelle. Manifestlisten und Manifestdateien werden ohne unabhängige TTL-Revalidierung zwischengespeichert. Ihre Zugriffsgültigkeit wird aus der Berechtigungsprüfung der Stammmetadaten abgeleitet. Das bedeutet, dass Abfragen, wenn Sie Amazon S3-Berechtigungen für eine Iceberg-Tabelle widerrufen, maximal 2 Minuten lang erfolgreich sein können, während zwischengespeicherte Metadaten verwendet werden.

Wichtig

Amazon S3 ermöglicht es Ihnen, Berechtigungen auf der Ebene einzelner Objekte festzulegen. Das bedeutet, dass es technisch möglich ist, Zugriff auf die Metadaten einer Iceberg-Tabelle zu gewähren und gleichzeitig den Zugriff auf einige der zugrunde liegenden Datendateien einzuschränken. Dadurch entsteht eine Inkonsistenz der Berechtigungen, die zu Abfragefehlern oder unerwarteten Zugriffsfehlern in Amazon Redshift führen kann.

Amazon Redshift validiert den Zugriff auf die zwischengespeicherte Stamm-Metadatendatei in regelmäßigen Abständen, überprüft oder erzwingt jedoch nicht die Konsistenz zwischen den Berechtigungen auf Metadaten- und Datendateiebene innerhalb Ihres Amazon S3-Buckets. Es liegt in der Verantwortung des Kunden, sicherzustellen, dass die Berechtigungen auf alle Dateien, die eine Iceberg-Tabelle bilden, einheitlich angewendet werden.

Um dies zu vermeiden, sollten Sie die folgenden bewährten Methoden berücksichtigen, wenn Sie in Amazon Redshift auf Iceberg-Tabellen verweisen:

  • Verwenden Sie beschreibende Schemanamen — Verwenden Sie beim Erstellen externer Schemas Namen, die die Quelle und den Zweck der Daten eindeutig angeben, wie z. B. oder. sales_data_lake customer_analytics

  • Nutzen Sie Tabellenstatistiken — Stellen Sie sicher, dass Spaltenstatistiken für Ihre Iceberg-Tabellen generiert werden, um die Abfrageleistung AWS Glue zu optimieren. Amazon Redshift verwendet diese Statistiken für die Planung und Optimierung von Abfragen.

  • Berücksichtigen Sie die Aktualität der Daten — Iceberg-Tabellen werden möglicherweise von anderen Diensten aktualisiert, während Sie sie abfragen. Amazon Redshift sorgt für Transaktionskonsistenz und stellt sicher, dass Sie während der Ausführung Ihrer Abfrage einen konsistenten Snapshot der Daten erhalten.

  • Verwenden Sie die entsprechenden IAM-Berechtigungen — Stellen Sie sicher, dass Ihr Amazon Redshift-Cluster oder Ihre Arbeitsgruppe über die erforderlichen IAM-Berechtigungen verfügt, um auf die Amazon S3-Standorte zuzugreifen, an denen Ihre Iceberg-Tabellen gespeichert sind, sowie auf die Metadaten des Datenkatalogs.

  • Berechtigungen auf Tabellenebene — Erteilen Sie Berechtigungen auf Tabellenebene, nicht auf der Ebene einzelner Dateien.

  • Einheitliche Berechtigungen — Sorgen Sie für einen einheitlichen Zugriff auf den gesamten Amazon S3-Pfad für Ihre Iceberg-Tabelle, einschließlich aller Metadaten, Manifest- und Datendateien.

  • Vermeiden Sie restriktive Richtlinien auf Objektebene — Legen Sie keine restriktiven Richtlinien auf Objektebene für einzelne Parquet-Dateien innerhalb des Präfixes einer Iceberg-Tabelle fest.

  • Erfahren Sie mehr über das Zwischenspeichern von TTL für Berechtigungsänderungen — Wenn Sie Amazon S3-Berechtigungen für eine Iceberg-Tabelle entziehen, können Abfragen mithilfe zwischengespeicherter Stammmetadaten bis zur konfigurierten TTL-Dauer (Standardeinstellung: 2 Minuten) weiterhin erfolgreich sein.

  • Überwachen Sie die Abfrageleistung — Verwenden Sie die Abfrageüberwachungsfunktionen von Amazon Redshift, um die Leistung von Abfragen anhand von Iceberg-Tabellen zu verfolgen und bei Bedarf zu optimieren.

Allgemeine Referenzierungsmuster

Die folgenden Beispiele veranschaulichen gängige Muster für die Referenzierung von Iceberg-Tabellen:

Aggregieren von Daten aus mehreren Iceberg-Tabellen:

SELECT region, SUM(sales_amount) as total_sales, COUNT(*) as transaction_count FROM data_lake.sales_transactions WHERE transaction_date >= '2024-01-01' GROUP BY region ORDER BY total_sales DESC;

Verbinden von Iceberg-Tabellen mit lokalen Amazon Redshift-Tabellen:

SELECT c.customer_name, c.customer_tier, SUM(o.order_amount) as total_orders FROM customers c JOIN data_lake.order_history o ON c.customer_id = o.customer_id WHERE o.order_date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY c.customer_name, c.customer_tier;

Verwendung der dreiteiligen Notation bei komplexen Abfragen:

WITH recent_orders AS ( SELECT customer_id, order_date, order_amount FROM "analytics_bucket@s3tablescatalog".ecommerce.orders WHERE order_date >= CURRENT_DATE - INTERVAL '7 days' ) SELECT customer_id, COUNT(*) as order_count, AVG(order_amount) as avg_order_value FROM recent_orders GROUP BY customer_id HAVING COUNT(*) > 1;