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