

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
<a name="emr-lf-fgac1"></a>

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
<a name="emr-lf-perm"></a>

### Tabelle non registrate in AWS Lake Formation
<a name="emr-lf-tbl-reg"></a>

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
<a name="emr-lf-tbl-not-reg"></a>

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 di tabelle o 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 ]

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/emr/latest/ManagementGuide/emr-lf-fgac1.html)

------
#### [ Iceberg ]

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/emr/latest/ManagementGuide/emr-lf-fgac1.html)

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**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 nelle versioni precedenti di EMR, 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 ]

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**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');
   ```

1. Per vedere i dettagli della tua tabella, vai a [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. 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.

1. 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 `x``y`, 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](https://cwiki.apache.org/confluence/display/HUDI/RFC+-+07+%3A+Point+in+time+Time-Travel+queries+on+Hudi+table) 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.