

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Delta Lake es un marco de capas de almacenamiento para arquitecturas de lake house que se suelen basar en Amazon S3. Con las versiones 6.9.0 y posteriores de Amazon EMR, puede utilizar [Apache Spark](https://aws.amazon.com/emr/features/spark/) 3.x en clústeres de Amazon EMR con tablas de Delta Lake. Para obtener más información sobre los lake houses con Delta Lake, consulte [https://delta.io/](https://delta.io/).

En la siguiente tabla, se muestra la versión de Delta incluida en la última versión de la serie 7.x de Amazon EMR, junto con los componentes que Amazon EMR instala con Delta.

Para ver la versión de los componentes instalados con Delta en esta versión, consulte Versiones de [componentes de la versión 7.12.0](emr-7120-release.md).


**Información sobre la versión Delta para emr-7.12.0**  

| Etiqueta de versión de Amazon EMR | Versión de Delta | Componentes instalados con Delta | 
| --- | --- | --- | 
| emr-7.12.0 | Delta 3.3.2-amzn-1 | Not available. | 

En la tabla siguiente, se muestra la versión de Delta incluida en la última versión de la serie Amazon EMR 6.x, junto con los componentes que Amazon EMR instala con Delta.

Para ver la versión de los componentes instalados con Delta en esta versión, consulte [Versiones de los componentes de la versión 6.15.0](emr-6150-release.md).


**Información de la versión de Delta para emr-6.15.0**  

| Etiqueta de versión de Amazon EMR | Versión de Delta | Componentes instalados con Delta | 
| --- | --- | --- | 
| emr-6.15.0 | Delta 2.4.0 | Not available. | 

# Introducción a Delta Lake
<a name="Deltaintro"></a>

Delta Lake es un proyecto de código abierto que ayuda a implementar arquitecturas de lago de datos modernas que se suelen basar en Amazon S3. Data Lake ofrece las siguientes capacidades:
+ Transacciones atómicas, coherentes, aisladas y duraderas (ACID) en Spark. Los lectores ven una vista coherente de la tabla durante un trabajo de Spark.
+ Gestión escalable de metadatos con procesamiento distribuido por Spark.
+ Combina los casos de uso de streaming y lotes en la misma tabla Delta.
+ Aplicación automática del esquema para evitar registros incorrectos durante la ingesta de datos.
+ Viaje en el tiempo con el control de versiones de datos.
+ Admite operaciones de combinación, actualización y eliminación para casos de uso complejos, como la captura de datos de cambio (CDC), upserts de streaming y mucho más.

# Uso de un clúster con Delta Lake instalado
<a name="Deltausing-cluster"></a>

**Topics**
+ [Uso de un clúster de Delta Lake con Flink](Deltacluster-flink.md)
+ [Utilice un clúster de Delta Lake con Trino](Deltacluster-trino.md)
+ [Utilice un clúster de Delta Lake con Spark](Deltausing-cluster-spark.md)
+ [Utilice un racimo de Delta Lake con Spark and AWS Glue](Deltacluster-spark-glue.md)

# Uso de un clúster de Delta Lake con Flink
<a name="Deltacluster-flink"></a>

Con la versión 6.11 y posteriores de Amazon EMR, puede usar Delta Lake con su clúster de Flink. En los siguientes ejemplos, se utiliza AWS CLI para trabajar con Delta Lake en un clúster Flink de Amazon EMR.

**nota**  
Amazon EMR admite la DataStream API de Flink cuando utiliza Delta Lake con un clúster de Flink.

## Creación de un clúster de Delta Lake
<a name="Deltacreate-a-delta-cluster"></a>

1. Cree un archivo, `delta_configurations.json`, con el siguiente contenido:

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

1. Cree un clúster con la siguiente configuración. Reemplace `example Amazon S3 bucket path` y `subnet ID` por sus valores.

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

## Inicialización de una sesión de yarn de Flink
<a name="Deltainit-flink-yarn"></a>

Para iniciar una sesión de Flink Yarn, ejecute el siguiente comando:

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

## Creación de un trabajo de Flink con Delta Lake
<a name="Deltabuild-flink-with-delta-lake"></a>

En los siguientes ejemplos, se muestra cómo usar sbt o Maven para crear su trabajo de Flink con Delta Lake.

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

[sbt](https://www.scala-sbt.org/1.x/docs/index.html) es una herramienta de compilación para Scala que puede usar con poca o ninguna configuración cuando tiene proyectos pequeños. 

```
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) es una herramienta de automatización de compilaciones de código abierto de Apache Software Foundation. Con Maven, puede crear, publicar e implementar un trabajo de Flink con Delta Lake en 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>
```

------

## Escritura en una tabla Delta con la API DataStream de Flink
<a name="Deltawrite-delta-table-with-flink-datastream-api"></a>

Utilice el siguiente ejemplo para crear un objeto DeltaSink para escribir en la tabla con 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;
}
```

## Lectura de una tabla Delta con la API Flink Datastream
<a name="Deltaread-delta-table-with-flink-datastream-api"></a>

Utilice el siguiente ejemplo para crear un acotado DeltaSource que se lea en la tabla con 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");
}
```

## Creación de receptores con soporte para múltiples clústeres para la versión independiente de Delta Lake
<a name="Deltasink-creation-with-multi-cluster"></a>

Utilice el siguiente ejemplo para crear una tabla en la que DeltaSink escribir `deltaTablePath` y que sea [compatible con varios clústeres](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;
}
```

## Ejecución del trabajo de Flink
<a name="Deltarun-flink-job"></a>

Use el comando siguiente para ejecutar el trabajo:

```
flink run FlinkJob.jar
```

# Utilice un clúster de Delta Lake con Trino
<a name="Deltacluster-trino"></a>

Con Amazon EMR versión 6.9.0 y versiones posteriores, puede usar Delta Lake con su clúster de Trino.

En este tutorial, utilizaremos el clúster Trino AWS CLI para trabajar con Delta Lake en Amazon EMR.

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

**Creación de un clúster de Delta Lake**

1. Cree un archivo, `delta_configurations.json` y establezca valores para el catálogo que elija. Por ejemplo, si quiere usar el metaalmacén de Hive como catálogo, su archivo debe tener el siguiente contenido:

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

   Si quieres usar el catálogo de AWS Glue como tienda, tu archivo debe tener el siguiente contenido:

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

1. Cree un clúster con la siguiente configuración y sustituya **example Amazon S3 bucket path** y **subnet ID** por sus propios valores.

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

## Inicialización de una sesión de Trino para Delta Lake
<a name="Deltainitialize-trino"></a>

Para iniciar una sesión de Trino, ejecute el siguiente comando

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

## Escritura en una tabla de Delta Lake
<a name="Deltatrino-write-table"></a>

Cree la siguiente tabla y escriba en ella con los siguientes comandos de SQL:

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

## Lectura de una tabla Delta Lake
<a name="Deltatrino-read-table"></a>

Lea desde la tabla con el siguiente comando SQL:

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

# Utilice un clúster de Delta Lake con Spark
<a name="Deltausing-cluster-spark"></a>

A partir de la versión 6.9.0 de Amazon EMR, puede usar Delta Lake con su clúster de Spark sin necesidad de incluir acciones de arranque. Para los lanzamientos 6.8.0 y anteriores de Amazon EMR, puede utilizar acciones de arranque para preinstalar todas las dependencias necesarias. 

En los siguientes ejemplos, se utiliza AWS CLI para trabajar con Delta Lake en un clúster de Amazon EMR Spark. 

Para usar Delta Lake en Amazon EMR con AWS Command Line Interface, primero cree un clúster. Para obtener información sobre cómo especificar la clasificación de Delta Lake con AWS Command Line Interface, consulte [Suministrar una configuración mediante la AWS Command Line Interface al crear un clúster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) o [Proporcionar una configuración con el SDK de Java al crear un clúster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk).

1. Cree un archivo, `configurations.json`, con el siguiente contenido:

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

1. Cree un clúster con la siguiente configuración y sustituya el ejemplo de Amazon S3 **bucket path** y **subnet ID** por el suyo propio.

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

   Como alternativa, puede crear un clúster de Amazon EMR y una aplicación de Spark con los siguientes archivos como dependencias de JAR en un trabajo de 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
   ```
**nota**  
Si utiliza Amazon EMR versión 7.0.0 o superior, `/usr/share/aws/delta/lib/delta-spark.jar` utilícela en lugar de. `/usr/share/aws/delta/lib/delta-core.jar`

   Para obtener más información, consulte [Envío de aplicaciones](https://spark.apache.org/docs/latest/submitting-applications.html#submitting-applications).

   Para incluir una dependencia jar en un trabajo de Spark, agregue las siguientes propiedades de configuración a la aplicación 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"
   ```

   Para obtener más información sobre las dependencias de trabajos de Spark, consulte [Dependency Management](https://spark.apache.org/docs/latest/running-on-kubernetes.html#dependency-management).

   Si utiliza Amazon EMR versión 7.0.0 o superior, añada la `/usr/share/aws/delta/lib/delta-spark.jar` configuración en su lugar.

   ```
   --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"
   ```

## Inicio de sesión de Spark para Delta Lake
<a name="Deltainitialize-spark-session"></a>

En los siguientes ejemplos se muestra cómo iniciar el intérprete de comandos interactivo de Spark, utilizar el envío de Spark o usar Cuadernos de Amazon EMR para trabajar con Delta Lake en Amazon EMR.

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

1. Conéctese al nodo principal mediante SSH. Para obtener más información, consulte [Conectarse al nodo principal mediante SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) en la *Guía de administración de Amazon EMR*.

1. Introduzca el siguiente comando para iniciar el shell de Spark. Para usar la PySpark carcasa, sustitúyala por`spark-shell`. `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 utiliza Amazon EMR versión 6.15.0 o posteriores, también debe usar las siguientes configuraciones para usar un control de acceso detallado basado en Lake Formation con 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. Conéctese al nodo principal mediante SSH. Para obtener más información, consulte [Conectarse al nodo principal mediante SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) en la *Guía de administración de Amazon EMR*.

1. Introduzca el siguiente comando para iniciar la sesión de Spark para 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 utiliza Amazon EMR versión 6.15.0 o posteriores, también debe usar las siguientes configuraciones para usar un control de acceso detallado basado en Lake Formation con 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 ]

Para iniciar una sesión de Spark con Amazon EMR Studio configure su sesión de Spark con el comando mágico **%%configure** de su cuaderno de Amazon EMR, como en el siguiente ejemplo. Para obtener más información, consulte [Usar la magia de Cuadernos de Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html#emr-magics) en la *Guía de administración de 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 utiliza Amazon EMR versión 6.15.0 o posteriores, también debe usar las siguientes configuraciones para usar un control de acceso detallado basado en Lake Formation con 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"
  }
}
```

------

## Escritura en una tabla de Delta Lake
<a name="Deltawrite-to-table"></a>

El siguiente ejemplo muestra cómo crear un conjunto de datos de Delta Lake DataFrame y cómo escribirlo como tal. El ejemplo muestra cómo trabajar con conjuntos de datos con el intérprete de comandos de Spark mientras está conectado al nodo principal usando SSH como usuario predeterminado de Hadoop. 

**nota**  
Para pegar muestras de código en el intérprete de comandos de Spark, escriba :paste en el símbolo del sistema, pegue el ejemplo y, a continuación, pulse CTRL \$1 D.

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

Spark incluye un intérprete de comandos basado en Python, `pyspark`, que puede utilizar para crear prototipos de programas de Spark escritos en Python. Al igual que con `spark-shell`, invoque `pyspark` en el nodo principal.

```
## 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");
```

------

## Lectura de una tabla 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;
```

------

# Utilice un racimo de Delta Lake con Spark and AWS Glue
<a name="Deltacluster-spark-glue"></a>

Para usar el AWS Glue Catalog como almacén de tablas de Delta Lake, cree un clúster con los siguientes pasos. Para obtener información sobre cómo especificar la clasificación de Delta Lake mediante AWS Command Line Interface, consulte [Proporcionar una configuración mediante la AWS Command Line Interface al crear un clúster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) o [Proporcionar una configuración mediante el SDK de Java al crear un clúster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk).

**Creación de un clúster de Delta Lake**

1. Cree un archivo, `configurations.json`, con el siguiente contenido:

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

1. Cree un clúster con la siguiente configuración y sustituya **example Amazon S3 bucket path** y **subnet ID** por sus propios valores.

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

# Consideraciones y limitaciones
<a name="Deltaconsiderations-limitations"></a>
+ Se admite el uso de Delta Lake con las versiones 6.9.0 y posteriores de Amazon EMR. Puede usar [Apache Spark](https://aws.amazon.com/emr/features/spark/) 3.x en clústeres de Amazon EMR con tablas Delta.
+ Le recomendamos que utilice el esquema de URI s3 para las rutas de ubicación de S3 en lugar de s3a para obtener el mejor rendimiento, la mejor seguridad y la mejor fiabilidad. Para obtener más información, consulte [Utilizar almacenamiento y sistemas de archivos](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-file-systems.html).
+ Con Amazon EMR 7.0, Delta Universal Format (UniForm) y no se convert-to-Iceberg admiten declaraciones.
+ Con Amazon EMR 6.9 y 6.10, al almacenar los datos de la tabla de Delta Lake en Amazon S3, los datos de las columnas se convierten en `NULL` después de la operación de cambio de nombre de las columnas. Este problema se resuelve con Amazon EMR 6.11. Para obtener más información sobre la operación experimental de cambio de nombre de columnas, consulte la [Column rename operation](https://docs.delta.io/latest/delta-batch.html#rename-columns) en la Guía del usuario de Delta Lake.
+ Cuando use EMR Delta con Glue en la región de Pekín (cn-north-1), establezca `hive.s3.endpoint` en `https://s3---cn-north-1.amazonaws.com.rproxy.govskope.us.cn`.
+ Si crea una base de datos en el catálogo de datos de AWS Glue fuera de Apache Spark, la base de datos podría tener un `LOCATION` campo vacío. Como Spark no permite crear bases de datos con una propiedad de ubicación vacía, aparecerá el siguiente error si usa Spark en Amazon EMR para crear una tabla Delta en una base de datos de Glue y la base de datos tiene una propiedad `LOCATION` vacía:

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

  Para resolver este problema, cree la base de datos en el Catálogo de datos con una ruta válida y no vacía para el campo `LOCATION`. A fin de ver los pasos para implementar esta solución, consulte [Excepción de argumento ilegal al crear una tabla](https://docs.aws.amazon.com/athena/latest/ug/notebooks-spark-known-issues.html#notebooks-spark-known-issues-illegal-argument-exception) en la *Guía del usuario de Amazon Athena*.

# Historial de lanzamientos de Delta
<a name="Delta-release-history"></a>

En la siguiente tabla se muestra la versión de Delta incluida en cada versión de lanzamiento de Amazon EMR, junto con los componentes instalados con la aplicación. Para ver las versiones de los componentes de cada versión, consulte la sección Versiones de los componentes en la versión correspondiente de [Versiones de Amazon EMR 7.x](emr-release-7x.md), [Versiones de lanzamiento de Amazon EMR 6.x](emr-release-6x.md) o [Versiones de lanzamiento de Amazon EMR 5.x](emr-release-5x.md).


**Información de la versión de Delta**  

| Etiqueta de versión de Amazon EMR | Versión de Delta | Componentes instalados con 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. | 