Supporto per il formato a tabella aperta - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Supporto per il formato a tabella aperta

Le versioni 6.15.0 e successive di Amazon EMR includono il supporto per il controllo granulare degli accessi basato su tabelle Hive, Apache Iceberg, Apache Hudi e Delta Lake durante la lettura e la scrittura di dati AWS Lake Formation con Spark SQL. Amazon EMR supporta il controllo degli accessi a livello di tabella, riga, colonna e cella con Apache Hudi. Le versioni 6.15.0 e successive di Amazon EMR includono il supporto per il controllo granulare degli accessi a livello di riga, colonna o cella basato su Lake Formation. AWS A partire da EMR 7.12, le operazioni DML e DDL che modificano i dati delle tabelle sono supportate per le tabelle Apache Hive, Apache Iceberg e Delta Lake utilizzando le credenziali vendute di Lake Formation.

Gli argomenti di questa sezione spiegano come accedere alle tabelle registrate di Lake Formation in formati di tabelle aperte dai job EMR Spark o dalle sessioni interattive con controllo degli accessi granulare.

Requisiti per l'autorizzazione

Tabelle non registrate in AWS Lake Formation

Per le tabelle non registrate con AWS Lake Formation, il ruolo di job runtime accede sia al AWS Glue Data Catalog che ai dati della tabella sottostante in Amazon S3. Ciò richiede che il ruolo di job runtime disponga delle autorizzazioni IAM appropriate per le operazioni di AWS Glue e Amazon S3.

Tabelle registrate in AWS Lake Formation

Per le tabelle registrate con AWS Lake Formation, il ruolo di job runtime accede ai metadati di AWS Glue Data Catalog, mentre le credenziali temporanee fornite da Lake Formation accedono ai dati della tabella sottostante in Amazon S3. Le autorizzazioni Lake Formation necessarie per eseguire un'operazione dipendono dalle chiamate API di AWS Glue Data Catalog e Amazon S3 avviate dal job Spark e possono essere riassunte come segue:

  • L'autorizzazione DESCRIBE consente al ruolo di runtime di leggere i metadati della tabella o del database nel Data Catalog

  • L'autorizzazione ALTER consente al ruolo di runtime di modificare i metadati di tabelle o database nel Data Catalog

  • L'autorizzazione DROP consente al ruolo di runtime di eliminare i metadati di tabelle o database dal Data Catalog

  • L'autorizzazione SELECT consente al ruolo di runtime di leggere i dati della tabella da Amazon S3

  • L'autorizzazione INSERT consente al ruolo di runtime di scrivere dati di tabella su Amazon S3

  • L'autorizzazione DELETE consente al ruolo di runtime di eliminare i dati della tabella da Amazon S3

    Nota

    Lake Formation valuta le autorizzazioni pigramente quando un job Spark chiama AWS Glue per recuperare i metadati della tabella e Amazon S3 per recuperare i dati della tabella. I lavori che utilizzano un ruolo di runtime con autorizzazioni insufficienti non falliranno finché Spark non effettuerà una chiamata AWS Glue o Amazon S3 che richiede l'autorizzazione mancante.

Nota

Nella seguente matrice di tabelle supportata:

  • Le operazioni contrassegnate come Supported utilizzano esclusivamente le credenziali di Lake Formation per accedere ai dati delle tabelle per le tabelle registrate con Lake Formation. Se le autorizzazioni di Lake Formation sono insufficienti, l'operazione non ricorrerà alle credenziali del ruolo di runtime. Per le tabelle non registrate con Lake Formation, le credenziali del ruolo di job runtime accedono ai dati della tabella.

  • Le operazioni contrassegnate come Supportate con autorizzazioni IAM sulla posizione Amazon S3 non utilizzano le credenziali di Lake Formation per accedere ai dati delle tabelle sottostanti in Amazon S3. Per eseguire queste operazioni, il ruolo di job runtime deve disporre delle autorizzazioni IAM di Amazon S3 necessarie per accedere ai dati della tabella, indipendentemente dal fatto che la tabella sia registrata con Lake Formation.

Hive
Operation AWS Lake Formation autorizzazioni Stato del supporto
SELECT SELECT Supportata
CREATE TABLE CREATE_TABLE Supportata
CREATE TABLE LIKE CREA_TABELLA Supportato con autorizzazioni IAM sulla posizione Amazon S3
CREATE TABLE AS SELECT CREATE_TABLE Supportato con autorizzazioni IAM sulla posizione Amazon S3
DESCRIBE TABLE DESCRIBE Supportata
SHOW TBLPROPERTIES DESCRIBE Supportata
SHOW COLUMNS DESCRIBE Supportata
SHOW PARTITIONS DESCRIBE Supportata
SHOW CREATE TABLE DESCRIBE Supportata
MODIFICA TABELLA tablename SELEZIONA e ALTER Supportata
MODIFICA LA POSIZIONE DEL tablename SET DI TABELLE - Non supportata
ALTER TABLE tablename AGGIUNGI PARTIZIONE SELEZIONA, INSERISCI e MODIFICA Supportata
REPAIR TABLE SELEZIONA e ALTER Supportata
CARICARE DATI Non supportata
INSERT INSERT e ALTER Supportata
INSERT OVERWRITE SELEZIONA, INSERISCI, ELIMINA e ALTER Supportata
DROP TABLE SELEZIONA, RILASCIA, ELIMINA e MODIFICA Supportata
TRUNCATE TABLE SELEZIONA, INSERISCI, ELIMINA e MODIFICA Supportata
Dataframe Writer V1 Uguale all'operazione SQL corrispondente

Supportata per l'aggiunta di dati a una tabella esistente. Per ulteriori informazioni, consulta le considerazioni e le limitazioni

Dataframe Writer V2 Uguale all'operazione SQL corrispondente

Supportata per l'aggiunta di dati a una tabella esistente. Per ulteriori informazioni, consulta le considerazioni e le limitazioni

Iceberg
Operation AWS Lake Formation autorizzazioni Stato del supporto
SELECT SELECT Supportata
CREATE TABLE CREATE_TABLE Supportata
CREATE TABLE LIKE CREA_TABELLA Supportato con autorizzazioni IAM sulla posizione Amazon S3
CREATE TABLE AS SELECT CREATE_TABLE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SOSTITUISCI LA TABELLA CON SELECT SELEZIONA, INSERISCI e ALTER Supportata
DESCRIBE TABLE DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW TBLPROPERTIES DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW CREATE TABLE DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
ALTER TABLE SELEZIONA, INSERISCI e MODIFICA Supportata
ALTER TABLE SET LOCATION SELEZIONA, INSERISCI e ALTER Supportato con autorizzazioni IAM sulla posizione Amazon S3
MODIFICA LA SCRITTURA DELLA TABELLA ORDINATA PER SELEZIONA, INSERISCI e ALTER Supportato con autorizzazioni IAM sulla posizione Amazon S3
ALTER TABLE WRITE DISTRIBUITO DA SELECT, INSERT e ALTER Supportato con autorizzazioni IAM sulla posizione Amazon S3
MODIFICARE LA TABELLA, RINOMINARE LA TABELLA CREATE_TABLE e DROP Supportata
INSERT INTO SELECT, INSERT e ALTER Supportata
INSERT OVERWRITE SELEZIONA, INSERISCI e ALTER Supportata
DELETE SELEZIONA, INSERISCI e ALTER Supportata
UPDATE SELEZIONA, INSERISCI e ALTER Supportata
MERGE INTO SELEZIONA, INSERISCI e ALTER Supportata
DROP TABLE SELEZIONA, ELIMINA e RILASCIA Supportata
DataFrame Writer V1 - Non supportata
DataFrame Scrittore V2 Uguale all'operazione SQL corrispondente

Supportata per l'aggiunta di dati a una tabella esistente. Per ulteriori informazioni, consulta le considerazioni e le limitazioni.

Tabelle dei metadati SELECT Supportato. Alcune tabelle sono nascoste. Per ulteriori informazioni, consulta le considerazioni e le limitazioni.
Stored procedure - Supportato per le tabelle che soddisfano le seguenti condizioni:
  • Tabelle non registrate in AWS Lake Formation

  • Tabelle che non utilizzano register_table e migrate

    Per ulteriori informazioni, fare riferimento a considerazioni e limitazioni.

Configurazione Spark per Iceberg: Se desideri utilizzare il formato Iceberg, imposta le seguenti configurazioni. Sostituisci DB_LOCATION con il percorso Amazon S3 in cui si trovano le tabelle Iceberg e sostituisci i segnaposto per regione e ID account con i tuoi valori.

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

Se desideri utilizzare il formato Iceberg nelle versioni precedenti di EMR, usa invece il seguente comando:

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

Esempi:

Ecco alcuni esempi di utilizzo delle tabelle Iceberg:

-- 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 autorizzazioni Stato del supporto
SELECT SELECT Supportata
CREATE TABLE CREATE_TABLE Supportato con autorizzazioni IAM sulla posizione Amazon S3
CREATE TABLE LIKE CREATE_TABLE Supportato con autorizzazioni IAM sulla posizione Amazon S3
CREATE TABLE AS SELECT - Non supportata
DESCRIBE TABLE DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW TBLPROPERTIES DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW COLUMNS DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW CREATE TABLE DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
ALTER TABLE SELECT Supportato con autorizzazioni IAM sulla posizione Amazon S3
INSERT INTO SELEZIONA e MODIFICA Supportato con autorizzazioni IAM sulla posizione Amazon S3
INSERT OVERWRITE SELEZIONA e MODIFICA Supportato con autorizzazioni IAM sulla posizione Amazon S3
DELETE - Non supportata
UPDATE - Non supportata
MERGE INTO - Non supportata
DROP TABLE SELEZIONA e RILASCIA Supportato con autorizzazioni IAM sulla posizione Amazon S3
DataFrame Writer V1 - Non supportata
DataFrame Scrittore V2 Uguale all'operazione SQL corrispondente Supportato con autorizzazioni IAM sulla posizione Amazon S3
Tabelle dei metadati - Non supportata
Manutenzione delle tabelle e funzionalità di utilità - Non supportata

Configurazione Spark per Hudi:

Per avviare la shell Spark su EMR 7.10 o versioni successive, usa il seguente comando:

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

Per avviare la shell Spark su versioni EMR precedenti, usa invece il comando seguente:

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

Esempi:

Ecco alcuni esempi di utilizzo delle tabelle Hudi:

-- 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;

Per interrogare l'ultima istantanea delle copy-on-write tabelle:

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

Per eseguire query sui dati compatti più recenti delle tabelle MOR, puoi eseguire query sulla tabella ottimizzata per la lettura che presenta il suffisso con _ro:

SELECT * FROM my_hudi_mor_table_ro
spark.read.table("my_hudi_mor_table_ro")
Delta Lake
Operation AWS Lake Formation autorizzazioni Stato del supporto
SELECT SELECT Supportata
CREATE TABLE CREATE_TABLE Supportata
CREATE TABLE LIKE - Non supportata
CREATE TABLE AS SELECT CREA_TABELLA Supportata
SOSTITUISCI LA TABELLA COME SELECT SELEZIONA, INSERISCI e ALTER Supportata
DESCRIBE TABLE DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW TBLPROPERTIES DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW COLUMNS DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
SHOW CREATE TABLE DESCRIBE Supportato con autorizzazioni IAM sulla posizione Amazon S3
ALTER TABLE SELEZIONA e INSERISCI Supportata
ALTER TABLE SET LOCATION SELEZIONA e INSERISCI Supportato con autorizzazioni IAM sulla posizione Amazon S3
MODIFICA TABLE CLUSTER tablename DI SELEZIONA e INSERISCI Supportato con autorizzazioni IAM sulla posizione Amazon S3
ALTER TABLE AGGIUNGI VINCOLO tablename SELEZIONA e INSERISCI Supportato con autorizzazioni IAM sulla posizione Amazon S3
MODIFICA IL VINCOLO tablename TABLE DROP SELEZIONA e INSERISCI Supportato con autorizzazioni IAM sulla posizione Amazon S3
INSERT INTO SELEZIONA e INSERISCI Supportata
INSERT OVERWRITE SELEZIONA e INSERISCI Supportata
DELETE SELEZIONA e INSERISCI Supportata
UPDATE SELEZIONA e INSERISCI Supportata
MERGE INTO SELEZIONA e INSERISCI Supportata
DROP TABLE SELEZIONA, ELIMINA e RILASCIA Supportata
DataFrame Writer V1 - Non supportata
DataFrame Scrittore V2 Uguale all'operazione SQL corrispondente

Supportata

Manutenzione delle tabelle e funzionalità di utilità - Non supportata

Configurazione Spark per Delta Lake:

Per usare Delta Lake with Lake Formation su EMR 7.10 e versioni successive, esegui il seguente comando:

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

Per utilizzare Delta Lake with Lake Formation su EMR da 6.15 a 7.9, esegui quanto segue

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

Se desideri che Lake Formation utilizzi il server di registrazione per gestire il tuo catalogo Spark, imposta su spark.sql.catalog.<managed_catalog_name>.lf.managed true.

Esempi:

Ecco alcuni esempi di utilizzo delle tabelle Delta Lake:

-- 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 *;

Creazione di una tabella Delta Lake in AWS Glue Data Catalog

Amazon EMR with Lake Formation non supporta i comandi DDL e la creazione di tabelle Delta nelle versioni EMR precedenti alla 7.12. Segui questi passaggi per creare tabelle nel AWS Glue Data Catalog.

  1. Usa l'esempio seguente per creare una tabella Delta. Assicurati che la tua posizione S3 esista.

    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. Per vedere i dettagli della tua tabella, vai a https://console.aws.amazon.com/glue/.

  3. Nella barra di navigazione a sinistra, espandi Data Catalog, scegli Tabelle, quindi scegli la tabella che hai creato. In Schema, dovresti vedere che la tabella Delta che hai creato con Spark memorizza tutte le colonne in un tipo di dati di array<string> AWS Glue.

  4. Per definire filtri a livello di colonna e cella in Lake Formation, rimuovi la col colonna dallo schema, quindi aggiungi le colonne presenti nello schema della tabella. In questo esempio, aggiungi le colonne xy, e. z

Con questa funzionalità, è possibile eseguire query istantanee sulle copy-on-write tabelle per interrogare l'istantanea più recente della tabella in un determinato commit o istante di compattazione. Attualmente, un cluster Amazon EMR abilitato a Lake Formation deve recuperare la colonna del tempo di commit di Hudi per eseguire query incrementali e query sui viaggi nel tempo. Non supporta la sintassi e la funzione di Spark. timestamp as of Spark.read() La sintassi corretta è. select * from table where _hoodie_commit_time <= point_in_time Per ulteriori informazioni, vedere Query Point in time Time-Travel sulla tabella Hudi.

Nota

Le prestazioni delle letture possono essere più lente nei cluster Lake Formation a causa di ottimizzazioni non supportate. Queste funzioni includono l'elenco dei file basato sui metadati Hudi e i dati ignorati. È preferibile testare le prestazioni dell'applicazione per accertarsi che soddisfi i requisiti.