Amazon Redshift unterstützt ab Patch 198 nicht mehr die Erstellung neuer Python-UDFs. Bestehende Python-UDFs werden bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im Blog-Posting
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.
Verweisen auf 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 Datenkatalogdatenbanken zu erstellen, die Iceberg-Tabellen enthalten, oder die dreiteilige Notation für den direkten Zugriff auf automatisch gemountete Kataloge verwenden.
Verwenden externer Schemas zum Verweisen auf Iceberg-Tabellen
Externe Schemas bieten eine 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 Redshift-Datenbank und einer bestimmten Datenkatalogdatenbank her, die Ihre Iceberg-Tabellen enthält.
Um ein externes Schema für Iceberg-Tabellen zu erstellen:
CREATE EXTERNAL SCHEMAschema_nameFROM 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 * FROMschema_name.iceberg_table_name;
Sie können Iceberg-Tabellen auch mit lokalen Amazon Redshift Redshift-Tabellen verbinden:
SELECT r.customer_id, i.order_date, r.customer_name FROM local_customers r JOINschema_name.iceberg_ordersi ON r.customer_id = i.customer_id;
Verwendung der dreiteiligen Notation mit automatisch eingehängten Katalogen
Three-part Notation ermöglicht es Ihnen, direkt auf Tabellen in automatisch bereitgestellten Katalogen zu verweisen, ohne externe Schemas zu erstellen. Diese Methode ist besonders nützlich, wenn Sie mit Amazon S3 S3-Tabellen-Buckets arbeiten, mit denen sie verbunden 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 AWS Glue Data Catalog automatischen Bereitstellung von
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 S3-Tabellenkatalog abzufragen:
SELECT * FROM "my_table_bucket@s3tablescatalog".my_database.my_iceberg_table;
Weitere Informationen zur Integration von Amazon S3 S3-Tabellen-Buckets mit Amazon Redshift finden Sie unter Integrieren von S3-Tabellen mit Amazon Redshift im Amazon S3 S3-Benutzerhandbuch.
Sie können auch Tabellen im automatisch bereitgestellten Stammkatalog referenzierenawsdatacatalog, der direkten Zugriff auf Datenbanken und Tabellen bietet, die AWS Glue Data Catalog in folgenden Verzeichnissen registriert sind:
SELECT * FROM awsdatacatalog.my_database.my_iceberg_table;
Weitere Informationen zur Verwendung des awsdatacatalog Stammkatalogs finden Sie unter Abfragen von 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 S3-Tabellen-Buckets festzulegen:
USE "my_table_bucket@s3tablescatalog".my_database; SELECT * FROMmy_iceberg_table;
So legen Sie einen Suchpfad für die Schemaauflösung mit Amazon S3 S3-Tabellen-Buckets fest:
USE "my_table_bucket@s3tablescatalog"; SET search_path TOmy_database; SELECT * FROMmy_iceberg_table;
Anmerkung
Die USE Anweisung und search_path werden nur für s3tablescatalog unterstützt. Sie können nicht mit verwendet werdenawsdatacatalog. Um auf Tabellen zu verweisenawsdatacatalog, verwenden Sie die vollständige dreiteilige Notation.
Bewährte Methoden für die Referenzierung von Iceberg-Tabellen
Eine Apache Iceberg-Tabelle ist eine einzelne logische Einheit, die aus mehreren Dateien besteht: einer Root-Metadatendatei (metadata.json), Manifestlisten, Manifestdateien und Datendateien (typischerweise .parquet). Die Root-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 Root-Metadatendatei, um alle referenzierten Datendateien zu ermitteln und zu lesen. Wenn Amazon Redshift Zugriff auf die Root-Metadatendatei hat, geht es davon aus, dass auch Zugriff auf alle zugrunde liegenden Datendateien erforderlich ist. Dies entspricht dem Design 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 Root-Metadatendatei, der Manifestlisten und der Manifestdateien) im Arbeitsspeicher zwischen. Die Root-Metadatendatei (metadata.json) wird mit Amazon S3 in einem konfigurierbaren Intervall (TTL) erneut validiert. Nach Ablauf der TTL führt Amazon Redshift eine Amazon S3 S3-HEAD-Anfrage für die Root-Metadatendatei durch, um zu überprüfen, ob die IAM-Rolle noch Zugriff hat und die Datei nicht geändert wurde. Wenn die Berechtigungsprüfung fehlschlägt oder die Datei geändert wurde, wird der zwischengespeicherte Eintrag gelöscht und die Metadaten werden erneut von Amazon S3 abgerufen. Da die Root-Metadatendatei der Einstiegspunkt für den gesamten Tabellenzugriff ist, dient diese Revalidierung als Zugangsberechtigung für die gesamte Tabelle. Manifestlisten und Manifestdateien werden ohne unabhängige TTL-Revalidierung zwischengespeichert — ihre Zugriffsgültigkeit wird aus der Prüfung der Root-Berechtigungen für Metadaten abgeleitet. Das heißt, wenn Sie Amazon S3-Berechtigungen für eine Iceberg-Tabelle entziehen, können Abfragen unter Verwendung zwischengespeicherter Metadaten für maximal 2 Minuten weiterhin erfolgreich sein.
Wichtig
Amazon S3 ermöglicht es Ihnen, Berechtigungen auf individueller Objektebene festzulegen, was 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. Dies führt zu einer Inkonsistenz bei den Berechtigungen, die zu Abfragefehlern oder unerwarteten Zugriffsfehlern in Amazon Redshift führen kann.
Amazon Redshift validiert regelmäßig den Zugriff auf die zwischengespeicherte Root-Metadatendatei, überprüft oder erzwingt jedoch keine Konsistenz zwischen Berechtigungen auf Metadaten- und Datendateiebene in Ihrem Amazon S3 S3-Bucket. Es liegt in der Verantwortung des Kunden, sicherzustellen, dass die Berechtigungen für alle Dateien, die eine Iceberg-Tabelle bilden, einheitlich angewendet werden.
Um dies zu vermeiden, sollten Sie beim Verweisen auf Iceberg-Tabellen in Amazon Redshift die folgenden bewährten Methoden berücksichtigen:
-
Verwenden Sie beschreibende Schemanamen — Verwenden Sie beim Erstellen externer Schemas Namen, die eindeutig auf die Quelle und den Zweck der Daten hinweisen, z. B. oder.
sales_data_lakecustomer_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.
-
Denken Sie an die Aktualität der Daten — Iceberg-Tabellen werden möglicherweise von anderen Diensten aktualisiert, während Sie sie abfragen. Amazon Redshift bietet Transaktionskonsistenz und stellt sicher, dass Sie während Ihrer Abfrageausführung einen konsistenten Snapshot der Daten sehen.
-
Verwenden Sie die entsprechenden IAM-Berechtigungen — Stellen Sie sicher, dass Ihr Amazon Redshift Redshift-Cluster oder Ihre Arbeitsgruppe über die erforderlichen IAM-Berechtigungen für den Zugriff auf die Amazon S3 S3-Standorte verfügt, an denen Ihre Iceberg-Tabellen gespeichert sind, sowie auf die Data Catalog-Metadaten.
-
Berechtigungen auf Tabellenebene — Gewähren Sie Berechtigungen auf Tabellenebene, nicht auf Ebene einzelner Dateien.
-
Einheitliche Berechtigungen — Sorgen Sie für einen einheitlichen Zugriff auf den gesamten Amazon S3 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.
-
Grundlegendes zum Zwischenspeichern von TTL für Berechtigungsänderungen — Wenn Sie Amazon S3 S3-Berechtigungen für eine Iceberg-Tabelle widerrufen, können Abfragen mit zwischengespeicherten Stammmetadaten bis zu der konfigurierten TTL-Dauer (Standard: 2 Minuten) weiterhin erfolgreich sein.
-
Abfrageleistung überwachen — 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 zeigen 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;
Iceberg-Tabellen mit lokalen Amazon Redshift Redshift-Tabellen verbinden:
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;