Unterstützung für das offene Tabellenformat - Amazon EMR

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.

Unterstützung für das offene Tabellenformat

Die Amazon EMR-Versionen 6.15.0 und höher bieten Unterstützung für eine differenzierte Zugriffskontrolle, die auf Hive-Tabellen, Apache Iceberg, Apache Hudi und Delta Lake basiert, wenn Sie Daten AWS Lake Formation mit Spark SQL lesen und schreiben. Amazon EMR unterstützt die Zugriffskontrolle auf Tabellen-, Zeilen-, Spalten- und Zellenebene mit Apache Hudi. Die Amazon EMR-Versionen 6.15.0 und höher bieten Unterstützung für eine differenzierte Zugriffskontrolle auf Zeilen-, Spalten- oder Zellenebene basierend auf Lake Formation. AWS Ab EMR 7.12 werden DML- und DDL-Operationen, die Tabellendaten ändern, für Apache Hive-, Apache Iceberg- und Delta Lake-Tabellen mit von Lake Formation vergebenen Anmeldeinformationen unterstützt.

Die Themen in diesem Abschnitt behandeln, wie Sie über EMR Spark-Jobs oder interaktive Sitzungen mit detaillierter Zugriffskontrolle auf registrierte Lake Formation-Tabellen in offenen Tabellenformaten zugreifen können.

Benötigte Berechtigungen

Tabellen, die nicht registriert sind in AWS Lake Formation

Bei Tabellen AWS Lake Formation, bei denen nicht registriert ist, greift die Job-Runtime-Rolle sowohl auf den AWS Glue-Datenkatalog als auch auf die zugrunde liegenden Tabellendaten in Amazon S3 zu. Dazu muss die Job-Runtime-Rolle über die entsprechenden IAM-Berechtigungen sowohl für AWS Glue- als auch für Amazon S3 S3-Operationen verfügen.

Tabellen sind registriert in AWS Lake Formation

Bei Tabellen AWS Lake Formation, bei denen registriert ist, greift die Job-Runtime-Rolle auf die Metadaten des AWS Glue-Datenkatalogs zu, während temporäre Anmeldeinformationen, die von Lake Formation bereitgestellt wurden, auf die zugrunde liegenden Tabellendaten in Amazon S3 zugreifen. Die Lake Formation Formation-Berechtigungen, die zur Ausführung eines Vorgangs erforderlich sind, hängen vom AWS Glue Data Catalog und den Amazon S3 S3-API-Aufrufen ab, die der Spark-Job initiiert, und lassen sich wie folgt zusammenfassen:

  • Die DESCRIBE-Berechtigung ermöglicht es der Runtime-Rolle, Tabellen- oder Datenbankmetadaten im Datenkatalog zu lesen

  • Die ALTER-Berechtigung ermöglicht der Runtime-Rolle, Tabellen- oder Datenbankmetadaten im Datenkatalog zu ändern

  • Die DROP-Berechtigung ermöglicht der Runtime-Rolle, Tabellen- oder Datenbankmetadaten aus dem Datenkatalog zu löschen

  • Die SELECT-Berechtigung ermöglicht es der Runtime-Rolle, Tabellendaten aus Amazon S3 zu lesen

  • Die INSERT-Berechtigung ermöglicht es der Runtime-Rolle, Tabellendaten in Amazon S3 zu schreiben

  • Die DELETE-Berechtigung ermöglicht es der Runtime-Rolle, Tabellendaten aus Amazon S3 zu löschen

    Anmerkung

    Lake Formation wertet Berechtigungen träge aus, wenn ein Spark-Job AWS Glue zum Abrufen von Tabellenmetadaten und Amazon S3 zum Abrufen von Tabellendaten aufruft. Jobs, die eine Runtime-Rolle mit unzureichenden Berechtigungen verwenden, schlagen erst fehl, wenn Spark einen AWS Glue- oder Amazon S3-Aufruf tätigt, für den die fehlende Berechtigung erforderlich ist.

Anmerkung

In der folgenden unterstützten Tabellenmatrix:

  • Als Unterstützt markierte Operationen verwenden ausschließlich Lake Formation-Anmeldeinformationen, um auf Tabellendaten für Tabellen zuzugreifen, die bei Lake Formation registriert sind. Wenn die Lake Formation Formation-Berechtigungen nicht ausreichen, greift der Vorgang nicht auf Anmeldeinformationen für Runtime-Rollen zurück. Bei Tabellen, die nicht bei Lake Formation registriert sind, greifen die Anmeldeinformationen der Job-Runtime-Rolle auf die Tabellendaten zu.

  • Operationen, die als Unterstützt mit IAM-Berechtigungen am Amazon S3-Standort markiert sind, verwenden keine Lake Formation Formation-Anmeldeinformationen für den Zugriff auf die zugrunde liegenden Tabellendaten in Amazon S3. Um diese Operationen auszuführen, muss die Job-Runtime-Rolle über die erforderlichen Amazon S3 S3-IAM-Berechtigungen für den Zugriff auf die Tabellendaten verfügen, unabhängig davon, ob die Tabelle bei Lake Formation registriert ist.

Hive
Operation AWS Lake Formation Berechtigungen Status der Support
SELECT SELECT Unterstützt
CREATE TABLE CREATE_TABLE Unterstützt
CREATE TABLE LIKE TABELLE ERSTELLEN Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
CREATE TABLE AS SELECT CREATE_TABLE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
DESCRIBE TABLE DESCRIBE Unterstützt
SHOW TBLPROPERTIES DESCRIBE Unterstützt
SHOW_COLUMNS DESCRIBE Unterstützt
SHOW PARTITIONS DESCRIBE Unterstützt
SHOW CREATE TABLE DESCRIBE Unterstützt
TABELLE ÄNDERN tablename SELECT und ALTER Unterstützt
POSITION DES tablename TABELLENSETS ÄNDERN - Nicht unterstützt
TABELLE ÄNDERN PARTITION tablename HINZUFÜGEN AUSWÄHLEN, EINFÜGEN und ÄNDERN Unterstützt
REPAIR TABLE SELECT und ALTER Unterstützt
DATEN LADEN Nicht unterstützt
INSERT INSERT und ALTER Unterstützt
INSERT OVERWRITE AUSWÄHLEN, EINFÜGEN, LÖSCHEN und ÄNDERN Unterstützt
DROP TABLE AUSWÄHLEN, ABLEGEN, LÖSCHEN und ÄNDERN Unterstützt
TRUNCATE TABLE AUSWÄHLEN, EINFÜGEN, LÖSCHEN und ÄNDERN Unterstützt
Dataframe Writer V1 Entspricht der entsprechenden SQL-Operation

Wird unterstützt, wenn Daten an eine bestehende Tabelle angehängt werden. Weitere Informationen finden Sie unter Überlegungen und Einschränkungen

Dataframe Writer V2 Entspricht der entsprechenden SQL-Operation

Wird unterstützt, wenn Daten an eine bestehende Tabelle angehängt werden. Weitere Informationen finden Sie unter Überlegungen und Einschränkungen

Iceberg
Operation AWS Lake Formation Berechtigungen Status der Support
SELECT SELECT Unterstützt
CREATE TABLE CREATE_TABLE Unterstützt
CREATE TABLE LIKE TABELLE ERSTELLEN Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
CREATE TABLE AS SELECT CREATE_TABLE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
ERSETZT DIE TABELLE ALS AUSWAHL SELECT, INSERT und ALTER Unterstützt
DESCRIBE TABLE DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW TBLPROPERTIES DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW CREATE TABLE DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
ALTER TABLE SELECT, INSERT und ALTER Unterstützt
ALTER TABLE SET LOCATION SELECT, INSERT und ALTER Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
ÄNDERN SIE DEN SCHREIBVORGANG IN DER TABELLE, GEORDNET NACH SELECT, INSERT und ALTER Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
DER SCHREIBVORGANG IN DER TABELLE WIRD VERTEILT VON SELECT, INSERT und ALTER Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
TABELLE ÄNDERN TABELLE UMBENENNEN CREATE_TABLE und DROP Unterstützt
INSERT INTO SELECT, INSERT und ALTER Unterstützt
INSERT OVERWRITE SELECT, INSERT und ALTER Unterstützt
DELETE SELECT, INSERT und ALTER Unterstützt
UPDATE SELECT, INSERT und ALTER Unterstützt
MERGE INTO SELECT, INSERT und ALTER Unterstützt
DROP TABLE AUSWÄHLEN, LÖSCHEN und ABLEGEN Unterstützt
DataFrame Writer V1 - Nicht unterstützt
DataFrame Schriftsteller V2 Entspricht der entsprechenden SQL-Operation

Wird unterstützt, wenn Daten an eine bestehende Tabelle angehängt werden. Weitere Informationen finden Sie unter Überlegungen und Einschränkungen.

Metadaten-Tabellen SELECT Unterstützt. Bestimmte Tabellen sind ausgeblendet. Weitere Informationen finden Sie unter Überlegungen und Einschränkungen.
Gespeicherte Prozeduren - Wird für Tabellen unterstützt, die die folgenden Bedingungen erfüllen:
  • Tabellen, die nicht registriert sind in AWS Lake Formation

  • Tabellen, die register_table und nicht verwenden migrate

    Weitere Informationen finden Sie unter Überlegungen und Einschränkungen.

Spark-Konfiguration für Iceberg: Wenn Sie das Iceberg-Format verwenden möchten, legen Sie die folgenden Konfigurationen fest. DB_LOCATIONErsetzen Sie durch den Amazon S3 S3-Pfad, in dem sich Ihre Iceberg-Tabellen befinden, und ersetzen Sie die Platzhalter für Region und Konto-ID durch Ihre eigenen Werte.

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION --conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.client.region=AWS_REGION

Wenn Sie das Iceberg-Format in früheren EMR-Versionen verwenden möchten, verwenden Sie stattdessen den folgenden Befehl:

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION --conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.client.assume-role.region=AWS_REGION --conf spark.sql.catalog.spark_catalog.lf.managed=true

Beispiele:

Hier sind einige Beispiele für die Arbeit mit Iceberg-Tabellen:

-- Create an Iceberg table CREATE TABLE my_iceberg_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING ICEBERG; -- Insert data INSERT INTO my_iceberg_table VALUES (1, 'Alice', current_timestamp()); -- Query the table SELECT * FROM my_iceberg_table;
Hudi
Operation AWS Lake Formation Berechtigungen Status der Support
SELECT SELECT Unterstützt
CREATE TABLE CREATE_TABLE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
CREATE TABLE LIKE CREATE_TABLE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
CREATE TABLE AS SELECT - Nicht unterstützt
DESCRIBE TABLE DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW TBLPROPERTIES DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW_COLUMNS DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW CREATE TABLE DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
ALTER TABLE SELECT Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
INSERT INTO SELECT und ALTER Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
INSERT OVERWRITE SELECT und ALTER Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
DELETE - Nicht unterstützt
UPDATE - Nicht unterstützt
MERGE INTO - Nicht unterstützt
DROP TABLE AUSWÄHLEN und ABLEGEN Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
DataFrame Writer V1 - Nicht unterstützt
DataFrame Schriftsteller V2 Entspricht der entsprechenden SQL-Operation Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
Metadaten-Tabellen - Nicht unterstützt
Funktionen zur Tabellenverwaltung und Hilfsprogramme - Nicht unterstützt

Spark-Konfiguration für Hudi:

Verwenden Sie den folgenden Befehl, um die Spark-Shell auf EMR 7.10 oder höheren Versionen zu starten:

spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension

Um die Spark-Shell auf früheren EMR-Versionen zu starten, verwenden Sie stattdessen den folgenden Befehl:

spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog.lf.managed=true

Beispiele:

Hier sind einige Beispiele für die Arbeit mit Hudi-Tabellen:

-- Create a Hudi table CREATE TABLE my_hudi_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING HUDI TBLPROPERTIES ( 'type' = 'cow', 'primaryKey' = 'id' ); -- Insert data INSERT INTO my_hudi_table VALUES (1, 'Alice', current_timestamp()); -- Query the latest snapshot SELECT * FROM my_hudi_table;

Um den neuesten Snapshot von copy-on-write Tabellen abzufragen:

SELECT * FROM my_hudi_cow_table
spark.read.table("my_hudi_cow_table")

Um die neuesten komprimierten Daten von MOR-Tabellen abzufragen, können Sie die leseoptimierte Tabelle mit dem Suffix _ro abfragen:

SELECT * FROM my_hudi_mor_table_ro
spark.read.table("my_hudi_mor_table_ro")
Delta Lake
Operation AWS Lake Formation Berechtigungen Status der Support
SELECT SELECT Unterstützt
CREATE TABLE CREATE_TABLE Unterstützt
CREATE TABLE LIKE - Nicht unterstützt
CREATE TABLE AS SELECT TABELLE ERSTELLEN Unterstützt
ERSETZT DIE TABELLE ALS AUSWAHL SELECT, INSERT und ALTER Unterstützt
DESCRIBE TABLE DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW TBLPROPERTIES DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW_COLUMNS DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
SHOW CREATE TABLE DESCRIBE Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
ALTER TABLE AUSWÄHLEN und EINFÜGEN Unterstützt
ALTER TABLE SET LOCATION AUSWÄHLEN und EINFÜGEN Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
ÄNDERN SIE DEN tablename TABELLENCLUSTER VON AUSWÄHLEN und EINFÜGEN Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
TABELLE ÄNDERN EINSCHRÄNKUNG tablename HINZUFÜGEN AUSWÄHLEN und EINFÜGEN Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
ÄNDERN SIE DIE EINSCHRÄNKUNG BEIM tablename ABLEGEN VON AUSWÄHLEN und EINFÜGEN Unterstützt mit IAM-Berechtigungen am Amazon S3 S3-Standort
INSERT INTO AUSWÄHLEN und EINFÜGEN Unterstützt
INSERT OVERWRITE AUSWÄHLEN und EINFÜGEN Unterstützt
DELETE AUSWÄHLEN und EINFÜGEN Unterstützt
UPDATE AUSWÄHLEN und EINFÜGEN Unterstützt
MERGE INTO AUSWÄHLEN und EINFÜGEN Unterstützt
DROP TABLE AUSWÄHLEN, LÖSCHEN und ABLEGEN Unterstützt
DataFrame Writer V1 - Nicht unterstützt
DataFrame Schriftsteller V2 Entspricht der entsprechenden SQL-Operation

Unterstützt

Funktionen zur Tabellenverwaltung und Hilfsprogramme - Nicht unterstützt

Spark-Konfiguration für Delta Lake:

Führen Sie den folgenden Befehl aus, um Delta Lake mit Lake Formation auf EMR 7.10 und höher zu verwenden:

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog

Um Delta Lake mit Lake Formation auf EMR 6.15 bis 7.9 zu verwenden, führen Sie den folgenden Befehl aus

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \ --conf spark.sql.catalog.spark_catalog.lf.managed=true

Wenn Sie möchten, dass Lake Formation einen Datensatzserver zur Verwaltung Ihres Spark-Katalogs verwendet, legen Sie spark.sql.catalog.<managed_catalog_name>.lf.managed den Wert auf true fest.

Beispiele:

Hier sind einige Beispiele für die Arbeit mit Delta Lake-Tabellen:

-- Create a Delta Lake table CREATE TABLE my_delta_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING DELTA; -- Insert data INSERT INTO my_delta_table VALUES (1, 'Alice', current_timestamp()); -- Query the table SELECT * FROM my_delta_table; -- Update data UPDATE my_delta_table SET name = 'Alice Smith' WHERE id = 1; -- Merge data MERGE INTO my_delta_table AS target USING (SELECT 2 as id, 'Bob' as name, current_timestamp() as created_at) AS source ON target.id = source.id WHEN MATCHED THEN UPDATE SET * WHEN NOT MATCHED THEN INSERT *;

Erstellen einer Delta Lake-Tabelle im AWS Glue Data Catalog

Amazon EMR with Lake Formation unterstützt keine DDL-Befehle und die Erstellung von Delta-Tabellen in EMR-Versionen vor 7.12. Gehen Sie wie folgt vor, um Tabellen im AWS Glue-Datenkatalog zu erstellen.

  1. Verwenden Sie das folgende Beispiel, um eine Delta-Tabelle zu erstellen. Stellen Sie sicher, dass Ihr S3-Standort existiert.

    spark-sql \ --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" \ --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" > CREATE DATABASE if not exists <DATABASE_NAME> LOCATION 's3://<S3_LOCATION>/transactionaldata/native-delta/<DATABASE_NAME>/'; > CREATE TABLE <TABLE_NAME> (x INT, y STRING, z STRING) USING delta; > INSERT INTO <TABLE_NAME> VALUES (1, 'a1', 'b1');
  2. Um die Details Ihrer Tabelle zu sehen, gehen Sie zu https://console.aws.amazon.com/glue/.

  3. Erweitern Sie in der linken Navigationsleiste den Datenkatalog, wählen Sie Tabellen und dann die Tabelle aus, die Sie erstellt haben. Unter Schema sollten Sie sehen, dass die Delta-Tabelle, die Sie mit Spark erstellt haben, alle Spalten in einem Datentyp von array<string> in AWS Glue speichert.

  4. Um Filter auf Spalten- und Zellenebene in Lake Formation zu definieren, entfernen Sie die col Spalte aus Ihrem Schema und fügen Sie dann die Spalten hinzu, die sich in Ihrem Tabellenschema befinden. Fügen Sie in diesem Beispiel die Spalten xy, und hinzu. z

Mit dieser Funktion können Sie Snapshot-Abfragen für copy-on-write Tabellen ausführen, um den neuesten Snapshot der Tabelle zu einem bestimmten Commit- oder Komprimierungszeitpunkt abzufragen. Derzeit muss ein Lake Formation-fähiger Amazon EMR-Cluster die Commit-Zeitspalte von Hudi abrufen, um inkrementelle Abfragen und Zeitreiseabfragen durchzuführen. Die Syntax und die Funktion von Spark werden nicht unterstützt. timestamp as of Spark.read() Die richtige Syntax istselect * from table where _hoodie_commit_time <= point_in_time. Weitere Informationen finden Sie unter Point-in-Time-Time-Travel-Abfragen in der Hudi-Tabelle.

Anmerkung

Die Leistung von Lesevorgängen auf Lake Formation-Clustern kann aufgrund von Optimierungen, die nicht unterstützt werden, langsamer sein. Zu diesen Features gehören das Auflisten von Dateien auf der Grundlage von Hudi-Metadaten und das Überspringen von Daten. Wir empfehlen Ihnen, die Leistung Ihrer Anwendung zu testen, um sicherzustellen, dass sie Ihrem SLA entspricht.