

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Delta Lake
<a name="emr-delta"></a>

Delta Lake est un framework de couche de stockage pour les architectures Lakehouse généralement construites sur Amazon S3. Avec les versions 6.9.0 et supérieures d'Amazon EMR, vous pouvez utiliser [Apache Spark](https://aws.amazon.com/emr/features/spark/) 3.x sur des clusters Amazon EMR dotés de tables Delta Lake. Pour plus d'informations sur les cabanes au bord du lac Delta, consultez le site [https://delta.io/](https://delta.io/).

Le tableau suivant répertorie la version de Delta incluse dans la dernière version d’Amazon EMR série 7.x, ainsi que les composants qu’Amazon EMR installe avec Delta.

Pour la version des composants installés avec Delta dans cette version, voir la [version 7.12.0 Versions des composants](emr-7120-release.md).


**Informations sur la version Delta pour emr-7.12.0**  

| Étiquette de version Amazon EMR | Version Delta | Composants installés avec Delta | 
| --- | --- | --- | 
| emr-7,12.0 | Delta 3.3.2-amzn-1 | Not available. | 

Le tableau suivant répertorie la version de Delta incluse dans la dernière version d'Amazon EMR série 6.x, ainsi que les composants qu'Amazon EMR installe avec Delta.

Pour connaître la version des composants installés avec Delta dans cette version, consultez les [versions des composants de la version 6.15.0](emr-6150-release.md).


**Informations sur la version Delta pour emr-6.15.0**  

| Étiquette de version Amazon EMR | Version Delta | Composants installés avec Delta | 
| --- | --- | --- | 
| emr-6.15.0 | Delta 2.4.0 | Not available. | 

# Présentation de Delta Lake
<a name="Deltaintro"></a>

Delta Lake est un projet open source qui permet de mettre en œuvre des architectures de lacs de données modernes généralement basées sur Amazon S3. Delta Lake propose les fonctions suivantes :
+ Transactions atomiques, cohérentes, isolées et durables (ACID) sur Spark. Les lecteurs bénéficient d'une vue cohérente du tableau lors d'une tâche Spark.
+ Gestion évolutive des métadonnées avec traitement distribué par Spark.
+ Combine les cas de streaming et d'utilisation par lots avec la même table Delta.
+ Application automatique du schéma pour éviter les mauvais enregistrements lors de l'ingestion de données.
+ Voyage dans le temps avec gestion des versions des données.
+ Prend en charge les opérations de fusion, de mise à jour et de suppression pour les cas d'utilisation complexes tels que la capture des données modifiées (CDC), le streaming upserts, etc.

# Utilisation d'un cluster sur lequel Delta Lake est installé
<a name="Deltausing-cluster"></a>

**Topics**
+ [Utiliser un cluster Delta Lake avec Flink](Deltacluster-flink.md)
+ [Utilisez un cluster Delta Lake avec Trino](Deltacluster-trino.md)
+ [Utiliser un cluster Delta Lake avec Spark](Deltausing-cluster-spark.md)
+ [Utilisez un cluster Delta Lake avec Spark and AWS Glue](Deltacluster-spark-glue.md)

# Utiliser un cluster Delta Lake avec Flink
<a name="Deltacluster-flink"></a>

Avec Amazon EMR version 6.11 ou ultérieure, vous pouvez utiliser Delta Lake avec votre cluster Flink. Les exemples suivants utilisent le AWS CLI pour travailler avec Delta Lake sur un cluster Amazon EMR Flink.

**Note**  
Amazon EMR prend en charge l' DataStream API Flink lorsque vous utilisez Delta Lake avec un cluster Flink.

## Création d'un cluster Delta Lake
<a name="Deltacreate-a-delta-cluster"></a>

1. Créez un fichier, `delta_configurations.json`, contenant les éléments suivants :

   ```
   [{"Classification":"delta-defaults",  
       "Properties":{"delta.enabled":"true"}}]
   ```

1. Créez un cluster avec la configuration suivante. Remplacez `example Amazon S3 bucket path` et `subnet ID` par les vôtres.

   ```
   aws emr create-cluster 
   --release-label emr-6.11.0   
   --applications Name=Flink  
   --configurations file://delta_configurations.json   
   --region us-east-1  --name My_Spark_Delta_Cluster  
   --log-uri  s3://amzn-s3-demo-bucket/  
   --instance-type m5.xlarge  
   --instance-count 3   
   --service-role EMR_DefaultRole_V2  
   --ec2-attributes  InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0
   ```

## Initialisation d'une session Flink yarn
<a name="Deltainit-flink-yarn"></a>

Pour initialiser une session Flink yarn, exécutez la commande suivante :

```
flink-yarn-session -d
```

## Créer une tâche Flink avec Delta Lake
<a name="Deltabuild-flink-with-delta-lake"></a>

Les exemples suivants montrent comment utiliser sbt ou Maven pour créer votre tâche Flink avec Delta Lake.

------
#### [ sbt ]

[sbt](https://www.scala-sbt.org/1.x/docs/index.html) est un outil de construction pour Scala que vous pouvez utiliser avec peu ou pas de configuration lorsque vous avez de petits projets. 

```
libraryDependencies ++= Seq(
  "io.delta" %% "delta-flink" % deltaConnectorsVersion % "provided",
  "io.delta" %% "delta-standalone" % deltaConnectorsVersion % "provided",
  "org.apache.flink" %% "flink-clients" % flinkVersion % "provided",
  "org.apache.flink" %% "flink-parquet" % flinkVersion % "provided",
  "org.apache.hadoop" % "hadoop-client" % hadoopVersion % "provided",
  "org.apache.flink" % "flink-table-common" % flinkVersion % "provided",
  "org.apache.flink" %% "flink-table-runtime" % flinkVersion % "provided")
```

------
#### [ Maven ]

[Maven](https://maven.apache.org) est un outil d'automatisation de build open source de l'Apache Software Foundation. Avec Maven, vous pouvez créer, publier et déployer une tâche Flink avec Delta Lake sur Amazon EMR.

```
<project>
<properties>
    <scala.main.version>2.12</scala.main.version>
    <delta-connectors-version>0.6.0</delta-connectors-version>
    <flink-version>1.16.1</flink-version>
    <hadoop-version>3.1.0</hadoop-version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.delta</groupId>
        <artifactId>delta-flink</artifactId>
        <version>$delta-connectors-version</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>io.delta</groupId>
        <artifactId>delta-standalone_$scala-main-version</artifactId>
        <version>$delta-connectors-version</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients</artifactId>
        <version>$flink-version</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-parquet</artifactId>
        <version>$flink-version</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>$hadoop-version</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-common</artifactId>
        <version>$flink-version</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-runtime</artifactId>
        <version>$flink-version</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
```

------

## Écrire dans une table Delta avec l'API Flink Datastream
<a name="Deltawrite-delta-table-with-flink-datastream-api"></a>

Utilisez l'exemple suivant pour créer un DeltaSink pour écrire dans la table avec un `deltaTablePath:`

```
public static DataStream<RowData> createDeltaSink(
        DataStream<RowData> stream,
        String deltaTablePath,
        RowType rowType) {
    Configuration configuration = new Configuration();
    DeltaSink<RowData> deltaSink = DeltaSink
            .forRowData(
                    new org.apache.flink.core.fs.Path(deltaTablePath),
                    configuration,
                    rowType)
            .build();
    stream.sinkTo(deltaSink);
    return stream;
}
```

## Lire à partir d'une table Delta avec l'API Flink Datastream
<a name="Deltaread-delta-table-with-flink-datastream-api"></a>

Utilisez l'exemple suivant pour créer un borné DeltaSource à lire dans le tableau avec un `deltaTablePath:`

```
public static DataStream<RowData> createBoundedDeltaSourceAllColumns(
        StreamExecutionEnvironment env,
        String deltaTablePath) {
    Configuration configuration = new Configuration();
    DeltaSource<RowData> deltaSource = DeltaSource
            .forBoundedRowData(
                    new org.apache.flink.core.fs.Path(deltaTablePath),
                    configuration)
            .build();

    return env.fromSource(deltaSource, WatermarkStrategy.noWatermarks(), "delta-source");
}
```

## Création de récepteurs avec prise en charge de plusieurs clusters pour le système autonome de Delta Lake
<a name="Deltasink-creation-with-multi-cluster"></a>

Utilisez l'exemple suivant pour créer une table DeltaSink à écrire avec un `deltaTablePath` [support multi-clusters](https://docs.delta.io/latest/delta-standalone.html#multi-cluster-setup) :

```
public DataStream<RowData> createDeltaSink(
        DataStream<RowData> stream,
        String deltaTablePath) {
    Configuration configuration = new Configuration();
    configuration.set("spark.delta.logStore.s3.impl", "io.delta.storage.S3DynamoDBLogStore");
    configuration.set("spark.io.delta.storage.S3DynamoDBLogStore.ddb.tableName", "delta_log");
    configuration.set("spark.io.delta.storage.S3DynamoDBLogStore.ddb.region", "us-east-1");
        
    DeltaSink<RowData> deltaSink = DeltaSink
        .forRowData(
            new Path(deltaTablePath),
            configuration,
            rowType)
        .build();
    stream.sinkTo(deltaSink);
    return stream;
}
```

## Exécuter la tâche Flink
<a name="Deltarun-flink-job"></a>

Utilisez la commande suivante pour exécuter votre tâche :

```
flink run FlinkJob.jar
```

# Utilisez un cluster Delta Lake avec Trino
<a name="Deltacluster-trino"></a>

Avec les versions 6.9.0 et supérieures d'Amazon EMR, vous pouvez utiliser Delta Lake avec votre cluster Trino.

Dans ce didacticiel, nous allons utiliser le AWS CLI cluster Trino pour travailler avec Delta Lake sur Amazon EMR.

## 
<a name="Deltacluster-trino-create"></a>

**Création d'un cluster Delta Lake**

1. Créez un fichier, `delta_configurations.json`, et définissez des valeurs pour le catalogue de votre choix. Par exemple, si vous souhaitez utiliser le métastore Hive comme catalogue, le contenu de votre fichier doit être le suivant :

   ```
   [{"Classification":"delta-defaults",  
       "Properties":{"delta.enabled":"true"}},  
       {"Classification":"trino-connector-delta",  
       "Properties":{"hive.metastore.uri":"thrift://localhost:9083"}}]
   ```

   Si vous souhaitez utiliser le AWS Glue Catalog comme boutique, le contenu de votre fichier doit être le suivant :

   ```
   [{"Classification":"delta-defaults",  
       "Properties":{"delta.enabled":"true"}},  
       {"Classification":"trino-connector-delta",  
       "Properties":{"hive.metastore":"glue"}}]
   ```

1. Créez un cluster avec la configuration suivante, en remplaçant **example Amazon S3 bucket path** et **subnet ID** par les vôtres.

   ```
   aws emr create-cluster 
       --release-label emr-6.9.0   
       --applications Name=Trino  
       --configurations file://delta_configurations.json   
       --region us-east-1  --name My_Spark_Delta_Cluster  
       --log-uri  s3://amzn-s3-demo-bucket/  
       --instance-type m5.xlarge  
       --instance-count 2   
       --service-role EMR_DefaultRole_V2  
       --ec2-attributes  InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0
   ```

## Initialisation de la session Trino pour Delta Lake
<a name="Deltainitialize-trino"></a>

Pour initialiser la session Trino, exécutez la commande suivante

```
trino-cli --catalog delta
```

## Écriture dans une table Delta Lake
<a name="Deltatrino-write-table"></a>

Créez et écrivez dans votre table à l'aide des commandes SQL suivantes :

```
SHOW SCHEMAS;

CREATE TABLE default.delta_table (id  int, data varchar, category varchar) WITH 
( location =  's3://amzn-s3-demo-bucket/<prefix>');

INSERT INTO default.delta_table VALUES  (1,'a','c1'), (2,'b','c2'), (3,'c','c3');
```

## Lecture à partir d'une table Delta Lake
<a name="Deltatrino-read-table"></a>

Lisez le contenu de votre table à l'aide de la commande SQL suivante :

```
SELECT * from default.delta_table;
```

# Utiliser un cluster Delta Lake avec Spark
<a name="Deltausing-cluster-spark"></a>

À partir de la version 6.9.0 d'Amazon EMR, vous pouvez utiliser Delta Lake avec votre cluster Spark sans avoir besoin d'actions d'amorçage. Pour les versions 6.8.0 et antérieures d'Amazon EMR, vous pouvez utiliser les actions amorçage pour préinstaller les dépendances nécessaires. 

Les exemples suivants utilisent le AWS CLI pour travailler avec Delta Lake sur un cluster Amazon EMR Spark. 

Pour utiliser Delta Lake sur Amazon EMR avec le AWS Command Line Interface, créez d'abord un cluster. Pour plus d'informations sur la façon de spécifier la classification Delta Lake avec AWS Command Line Interface, voir [Fournir une configuration à l'aide du AWS Command Line Interface lorsque vous créez un cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) ou [Fournir une configuration avec le SDK Java lorsque vous créez un cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk).

1. Créez un fichier, `configurations.json`, contenant les éléments suivants :

   ```
   [{"Classification":"delta-defaults",  "Properties":{"delta.enabled":"true"} }]
   ```

1. Créez un cluster avec la configuration suivante, en remplaçant l'exemple d'Amazon S3 **bucket path** et le **subnet ID** par le vôtre.

   ```
   aws emr create-cluster 
        --release-label  emr-6.9.0  
        --applications Name=Spark  
        --configurations file://delta_configurations.json   
        --region us-east-1  
        --name My_Spark_Delta_Cluster  
        --log-uri  s3://amzn-s3-demo-bucket/  
        --instance-type m5.xlarge  
        --instance-count 2   
        --service-role EMR_DefaultRole_V2  
        --ec2-attributes  InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0
   ```

   Vous pouvez également créer un cluster Amazon EMR et une application Spark avec les fichiers suivants en tant que dépendances JAR dans une tâche Spark :

   ```
   /usr/share/aws/delta/lib/delta-core.jar,
   /usr/share/aws/delta/lib/delta-storage.jar,    
   /usr/share/aws/delta/lib/delta-storage-s3-dynamodb.jar
   ```
**Note**  
Si vous utilisez les versions 7.0.0 ou supérieures d'Amazon EMR, utilisez `/usr/share/aws/delta/lib/delta-spark.jar` à la place de. `/usr/share/aws/delta/lib/delta-core.jar`

   Pour plus d'informations, consultez [Soumission d'applications](https://spark.apache.org/docs/latest/submitting-applications.html#submitting-applications).

   Pour inclure une dépendance JAR dans la tâche Spark, vous pouvez ajouter les propriétés de configuration suivantes à l'application Spark :

   ```
   --conf “spark.jars=/usr/share/aws/delta/lib/delta-core.jar,
        /usr/share/aws/delta/lib/delta-storage.jar,
        /usr/share/aws/delta/lib/delta-storage-s3-dynamodb.jar"
   ```

   Pour plus d'informations sur les dépendances entre les tâches de Spark, consultez [Gestion des dépendances](https://spark.apache.org/docs/latest/running-on-kubernetes.html#dependency-management).

   Si vous utilisez les versions 7.0.0 ou supérieures d'Amazon EMR, ajoutez plutôt la `/usr/share/aws/delta/lib/delta-spark.jar` configuration.

   ```
   --conf “spark.jars=/usr/share/aws/delta/lib/delta-spark.jar,
        /usr/share/aws/delta/lib/delta-storage.jar,
        /usr/share/aws/delta/lib/delta-storage-s3-dynamodb.jar"
   ```

## Initialisation d'une session Spark pour Delta Lake
<a name="Deltainitialize-spark-session"></a>

Les exemples suivants montrent comment lancer le shell interactif Spark, utiliser Spark submit ou utiliser Blocs-notes EMR pour travailler avec Delta Lake sur Amazon EMR.

------
#### [ spark-shell ]

1. Connexion au nœud primaire à l'aide de SSH. Pour plus d'informations, consultez [Connexion au nœud primaire à l'aide de SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) dans le *Guide de gestion d'Amazon EMR*.

1. Entrez la commande suivante pour lancer le shell Spark. Pour utiliser la PySpark coque, remplacez-la `spark-shell` par`pyspark`.

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

   Si vous exécutez Amazon EMR version 6.15.0 ou ultérieure, vous devez également utiliser les configurations suivantes pour utiliser un contrôle d'accès précis basé sur Lake Formation with Delta Lake.

   ```
   spark-shell \  
     --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
   ```

------
#### [ spark-submit ]

1. Connexion au nœud primaire à l'aide de SSH. Pour plus d'informations, consultez [Connexion au nœud primaire à l'aide de SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) dans le *Guide de gestion d'Amazon EMR*.

1. Entrez la commande suivante pour lancer la session Spark pour Delta Lake.

   ```
   spark-submit  
   —conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" 
   —conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
   ```

   Si vous exécutez Amazon EMR version 6.15.0 ou ultérieure, vous devez également utiliser les configurations suivantes pour utiliser un contrôle d'accès précis basé sur Lake Formation with Delta Lake.

   ```
   spark-submit \  `
   --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
   ```

------
#### [ EMR Studio notebooks ]

Pour initialiser une session Spark à l'aide des blocs-notes Amazon EMR Studio, configurez votre session Spark à l'aide de la commande magique **%%configure** de votre bloc-notes Amazon EMR, comme dans l'exemple suivant. Pour plus d'informations, consultez [Utilisation des magies de Blocs-notes EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html#emr-magics) dans le *Guide de gestion Amazon EMR*.

```
%%configure -f
{
  "conf": {
    "spark.sql.extensions":  "io.delta.sql.DeltaSparkSessionExtension",
     "spark.sql.catalog.spark_catalog":  "org.apache.spark.sql.delta.catalog.DeltaCatalog"
  }
}
```

Si vous exécutez Amazon EMR version 6.15.0 ou ultérieure, vous devez également utiliser les configurations suivantes pour utiliser un contrôle d'accès précis basé sur Lake Formation with Delta Lake.

```
%%configure -f   
{
  "conf": {
    "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension",
    "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog",
    "spark.sql.catalog.spark_catalog.lf.managed": "true"
  }
}
```

------

## Écriture dans une table Delta Lake
<a name="Deltawrite-to-table"></a>

L'exemple suivant montre comment créer un jeu de données Delta Lake DataFrame et l'écrire sous forme de jeu de données. L'exemple montre comment travailler avec des jeux de données avec le shell Spark lorsque vous êtes connecté au nœud primaire en utilisant SSH comme utilisateur hadoop par défaut. 

**Note**  
Pour coller des exemples de code dans le shell Spark, tapez :paste à l'invite, collez l'exemple, puis appuyez sur CTRL \$1 D.

------
#### [ PySpark ]

Spark inclut un shell basé sur Python, `pyspark`, que vous pouvez utiliser pour créer un prototype de programmes Spark écrits en Python. Tout comme pour `spark-shell`, invoquez `pyspark` sur le nœud primaire.

```
## Create a DataFrame
data =  spark.createDataFrame([("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"),
("101",  "2015-01-01", "2015-01-01T12:14:58.597216Z"),
("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"),
("103",  "2015-01-01",  "2015-01-01T13:51:40.519832Z")],
["id", "creation_date",  "last_update_time"])

## Write a DataFrame as a Delta Lake dataset to the S3  location
spark.sql("""CREATE  TABLE IF NOT EXISTS delta_table (id string, creation_date string, 
last_update_time string)
USING delta location
's3://amzn-s3-demo-bucket/example-prefix/db/delta_table'""");

data.writeTo("delta_table").append()
```

------
#### [ Scala ]

```
import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.functions._
 
// Create a DataFrame
val data = Seq(("100",  "2015-01-01",  "2015-01-01T13:51:39.340396Z"),
("101",  "2015-01-01",  "2015-01-01T12:14:58.597216Z"),
("102",  "2015-01-01", "2015-01-01T13:51:40.417052Z"),
("103",  "2015-01-01",  "2015-01-01T13:51:40.519832Z")).toDF("id", "creation_date",  "last_update_time")

// Write a DataFrame as a Delta Lake dataset to the S3  location
spark.sql("""CREATE  TABLE IF NOT EXISTS delta_table (id string,
creation_date string,
last_update_time string)
USING delta location
's3://amzn-s3-demo-bucket/example-prefix/db/delta_table'""");

data.write.format("delta").mode("append").saveAsTable("delta_table")
```

------
#### [ SQL ]

```
-- Create a Delta  Lake table with the S3 location
CREATE TABLE delta_table(id string,
creation_date string, 
last_update_time string)
USING delta LOCATION
's3://amzn-s3-demo-bucket/example-prefix/db/delta_table';

-- insert data into the table
INSERT INTO delta_table VALUES  ("100", "2015-01-01",  "2015-01-01T13:51:39.340396Z"),
("101",  "2015-01-01",  "2015-01-01T12:14:58.597216Z"),
("102",  "2015-01-01", "2015-01-01T13:51:40.417052Z"),
("103",  "2015-01-01", "2015-01-01T13:51:40.519832Z");
```

------

## Lecture à partir d'une table Delta Lake
<a name="Deltaread-from-table"></a>

------
#### [ PySpark ]

```
ddf = spark.table("delta_table")
ddf.show()
```

------
#### [ Scala ]

```
val ddf =  spark.table("delta_table")
ddf.show()
```

------
#### [ SQL ]

```
SELECT * FROM delta_table;
```

------

# Utilisez un cluster Delta Lake avec Spark and AWS Glue
<a name="Deltacluster-spark-glue"></a>

Pour utiliser le catalogue AWS Glue comme métastore pour les tables Delta Lake, créez un cluster en suivant les étapes suivantes. Pour plus d'informations sur la spécification de la classification de Delta Lake à l'aide de AWS Command Line Interface, voir [Fournir une configuration à l'aide du AWS Command Line Interface lorsque vous créez un cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) ou [Fournissez une configuration à l'aide du SDK Java lorsque vous créez un cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk).

**Création d'un cluster Delta Lake**

1. Créez un fichier, `configurations.json`, contenant les éléments suivants :

   ```
   [{"Classification":"delta-defaults",  
   "Properties":{"delta.enabled":"true"}},
   {"Classification":"spark-hive-site",
   "Properties":{"hive.metastore.client.factory.class":"com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"}}]
   ```

1. Créez un cluster avec la configuration suivante, en remplaçant **example Amazon S3 bucket path** et **subnet ID** par les vôtres.

   ```
   aws emr create-cluster 
       --release-label  emr-6.9.0  
       --applications Name=Spark  
       --configurations file://delta_configurations.json 
       --region us-east-1  
       --name My_Spark_Delta_Cluster  
       --log-uri  s3://amzn-s3-demo-bucket/  
       --instance-type m5.xlarge  
       --instance-count 2   
       --service-role EMR_DefaultRole_V2  
       --ec2-attributes  InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0
   ```

# Considérations et restrictions
<a name="Deltaconsiderations-limitations"></a>
+ Delta Lake est compatible avec les versions 6.9.0 et supérieures d'Amazon EMR. Vous pouvez utiliser [Apache Spark](https://aws.amazon.com/emr/features/spark/) 3.x sur des clusters Amazon EMR dotés de tables Delta.
+ Nous vous recommandons d'utiliser le schéma d'URI s3 pour les chemins de localisation S3 au lieu de s3a pour des performances, une sécurité et une fiabilité optimales. Pour plus d'informations, consultez [Utilisation des systèmes de stockage et de fichiers](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-file-systems.html).
+ Avec Amazon EMR 7.0, Delta Universal Format (UniForm) les convert-to-Iceberg instructions ne sont pas prises en charge.
+ Avec Amazon EMR 6.9 et 6.10, lorsque vous stockez des données de table Delta Lake dans Amazon S3, les données de colonne deviennent `NULL` après l'opération de renommage des colonnes. Ce problème est résolu avec Amazon EMR 6.11. Pour plus d'informations sur l'opération expérimentale de changement de nom de colonne, consultez [Opération de renommage de colonne](https://docs.delta.io/latest/delta-batch.html#rename-columns) dans le Guide de l'utilisateur de Delta Lake.
+ Lorsque vous utilisez EMR Delta with Glue dans la région de Pékin (cn-north-1), réglez sur. `hive.s3.endpoint` `https://s3---cn-north-1.amazonaws.com.rproxy.govskope.ca.cn`
+ Si vous créez une base de données dans le catalogue de données AWS Glue en dehors d'Apache Spark, le `LOCATION` champ de la base de données peut être vide. Comme Spark n'autorise pas la création de bases de données avec une propriété d'emplacement vide, l'erreur suivante s'affichera si vous utilisez Spark dans Amazon EMR pour créer une table Delta dans une base de données Glue et que la base de données possède une propriété vide `LOCATION` :

  ```
  IllegalArgumentException: Can not create a Path from an empty string
  ```

  Pour résoudre ce problème, créez la base de données dans le catalogue de données avec un chemin valide et non vide pour le champ `LOCATION`. Pour connaître les étapes de mise en œuvre de cette solution, consultez la section [Exception d'argument illégal lors de la création d'une table](https://docs.aws.amazon.com/athena/latest/ug/notebooks-spark-known-issues.html#notebooks-spark-known-issues-illegal-argument-exception) dans le *Guide de l'utilisateur Amazon Athena*.

# Historique des versions de Delta
<a name="Delta-release-history"></a>

Le tableau suivant répertorie les versions de Delta incluses dans chaque version d'Amazon EMR, ainsi que les composants installés avec l'application. Pour connaître les versions des composants de chaque version, consultez la section Version des composants de votre version dans [Versions Amazon EMR 7.x](emr-release-7x.md), [Versions Amazon EMR 6.x](emr-release-6x.md) ou [Versions Amazon EMR 5.x](emr-release-5x.md).


**Informations sur la version Delta**  

| Étiquette de version Amazon EMR | Version Delta | Composants installés avec Delta | 
| --- | --- | --- | 
| emr-7,12.0 | 3.3.2-amzn-1 | Not available. | 
| emr-7.11.0 | 3.3.2-amzn-0 | Not available. | 
| emr-7.10.0 | 3.3.0-amzn-2 | Not available. | 
| emr-7.9.0 | 3.3.0-amzn-1 | Not available. | 
| emr-7,8.0 | 3.3.0-amzn-0 | Not available. | 
| emr-7,7.0 | 3.2.1-amzn-2 | Not available. | 
| emr-7.6.0 | 3.2.1-amzn-1 | Not available. | 
| emr-7.5.0 | 3.2.1-amzn-0 | Not available. | 
| emr-7.4.0 | 3.2.0-amzn-1 | Not available. | 
| emr-7.3.0 | 3.2.0-amzn-0 | Not available. | 
| emr-7.2.0 | 3.1.0 | Not available. | 
| emr-7.1.0 | 3.0.0 | Not available. | 
| emr-7.0.0 | 3.0.0 | Not available. | 
| emr-6.15.0 | 2.4.0 | Not available. | 
| emr-6.14.0 | 2.4.0 | Not available. | 
| emr-6.13.0 | 2.4.0 | Not available. | 
| emr-6.12.0 | 2.4.0 | Not available. | 
| emr-6.11.1 | 2.2.0 | Not available. | 
| emr-6.11.0 | 2.2.0 | Not available. | 
| emr-6.10.1 | 2.2.0 | Not available. | 
| emr-6.10.0 | 2.2.0 | Not available. | 
| emr-6.9.1 | 2.1.0 | Not available. | 
| emr-6.9.0 | 2.1.0 | Not available. | 