

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

O Delta Lake é um framework de camada de armazenamento para arquiteturas de lakehouse comumente desenvolvidas no Amazon S3. Com as versões 6.9.0 e posteriores do Amazon EMR, é possível usar o [Apache Spark](https://aws.amazon.com/emr/features/spark/) 3.x em clusters do Amazon EMR com tabelas Delta Lake. Para obter mais informações sobre lakehouses com Delta Lake, consulte [https://delta.io/](https://delta.io/).

A tabela a seguir lista a versão do Delta incluída na versão mais recente da série 7.x do Amazon EMR, além dos componentes que o Amazon EMR instala com o Delta.

Para a versão dos componentes instalados com o Delta nesta versão, consulte Versões de [componentes da versão 7.12.0](emr-7120-release.md).


**Informações sobre a versão Delta do emr-7.12.0**  

| Rótulo de versão do Amazon EMR | Versão Delta | Componentes instalados com o Delta | 
| --- | --- | --- | 
| emr-7.12.0 | Delta 3.3.2-amzn-1 | Not available. | 

A tabela a seguir lista a versão do Delta incluída na versão mais recente da série 6.x do Amazon EMR, além dos componentes que o Amazon EMR instala com o Delta.

Para obter a versão dos componentes instalados com o Delta nessa versão, consulte [Release 6.15.0 Component Versions](emr-6150-release.md).


**Informações de versão do Delta para o emr-6.15.0**  

| Rótulo de versão do Amazon EMR | Versão Delta | Componentes instalados com o Delta | 
| --- | --- | --- | 
| emr-6.15.0 | Delta 2.4.0 | Not available. | 

# Introdução ao Delta Lake
<a name="Deltaintro"></a>

O Delta Lake é um projeto de código aberto que ajuda a implementar arquiteturas modernas de data lake comumente desenvolvidas no Amazon S3. O Delta Lake oferece os seguintes recursos:
+ Transações atômicas, consistentes, isoladas e duráveis (ACID) no Spark. Os leitores têm uma visualização consistente da tabela durante um trabalho do Spark.
+ Tratamento escalável de metadados com processamento distribuído pelo Spark.
+ Combina casos de uso de transmissão e em lote com a mesma tabela Delta.
+ Aplicação automática de esquema para evitar registros incorretos durante a ingestão de dados.
+ Viagem no tempo com versionamento de dados.
+ Oferece suporte a operações de mesclagem, atualização e exclusão para casos de uso complexos, como captura de dados de alteração (CDC), atualizações de transmissão e muito mais.

# Usar um cluster com o Delta Lake instalado
<a name="Deltausing-cluster"></a>

**Topics**
+ [Usar um cluster do Delta Lake com o Flink](Deltacluster-flink.md)
+ [Usar um cluster Delta Lake com o Trino](Deltacluster-trino.md)
+ [Usar um cluster do Delta Lake com o Spark](Deltausing-cluster-spark.md)
+ [Use um cluster Delta Lake com Spark e Glue AWS](Deltacluster-spark-glue.md)

# Usar um cluster do Delta Lake com o Flink
<a name="Deltacluster-flink"></a>

Com o Amazon EMR versão 6.11 e versões posteriores, você pode usar o Delta Lake com seu cluster do Flink. Os exemplos a seguir usam o AWS CLI para trabalhar com o Delta Lake em um cluster Amazon EMR Flink.

**nota**  
O Amazon EMR oferece suporte à DataStream API do Flink quando você usa o Delta Lake com um cluster do Flink.

## Criar um cluster Delta Lake
<a name="Deltacreate-a-delta-cluster"></a>

1. Crie um arquivo `delta_configurations.json`, com o seguinte conteúdo:

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

1. Crie um cluster com a configuração a seguir. Substitua a `example Amazon S3 bucket path` e o `subnet ID` por seus próprios.

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

## Inicializar uma sessão do yarn do Flink
<a name="Deltainit-flink-yarn"></a>

Para inicializar uma sessão do yarn do Flink, execute o seguinte comando:

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

## Compilar um trabalho no Flink com Delta Lake
<a name="Deltabuild-flink-with-delta-lake"></a>

Os exemplos a seguir mostram como usar o sbt ou o Maven para criar seu trabalho no Flink com o Delta Lake.

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

O [sbt](https://www.scala-sbt.org/1.x/docs/index.html) é uma ferramenta de build para Scala que pode ser usada com pouca ou nenhuma configuração quando você tem pequenos projetos. 

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

O [Maven](https://maven.apache.org) é uma ferramenta de automação de build de código aberto da Apache Software Foundation. Com o Maven, é possível compilar, publicar e implantar um trabalho do Flink com o Delta Lake no 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>
```

------

## Gravar em uma tabela Delta com a API Flink Datastream
<a name="Deltawrite-delta-table-with-flink-datastream-api"></a>

Use o exemplo a seguir para criar um DeltaSink para gravar na tabela com um `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;
}
```

## Ler uma tabela Delta com a API Flink Datastream
<a name="Deltaread-delta-table-with-flink-datastream-api"></a>

Use o exemplo a seguir para criar um limite DeltaSource para leitura da tabela com um `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");
}
```

## Criação de coletores com suporte a vários clusters para Delta Lake independente
<a name="Deltasink-creation-with-multi-cluster"></a>

Use o exemplo a seguir para criar uma DeltaSink tabela para gravar com [suporte a `deltaTablePath` e vários 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;
}
```

## Executar o trabalho do Flink
<a name="Deltarun-flink-job"></a>

Use o seguinte comando para executar o trabalho:

```
flink run FlinkJob.jar
```

# Usar um cluster Delta Lake com o Trino
<a name="Deltacluster-trino"></a>

Com as versões 6.9.0 e posteriores do Amazon EMR, você pode usar o Delta Lake com seu cluster do Trino.

Neste tutorial, usaremos o AWS CLI para trabalhar com o Delta Lake no cluster Trino do Amazon EMR.

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

**Criar um cluster Delta Lake**

1. Crie um arquivo, `delta_configurations.json`, e defina valores para o catálogo escolhido. Por exemplo, para usar o Hive Metastore como catálogo, o arquivo deve ter o seguinte conteúdo:

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

   Se você quiser usar o AWS Glue Catalog como sua loja, seu arquivo deve ter o seguinte conteúdo:

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

1. Crie um cluster com a configuração a seguir, substituindo **example Amazon S3 bucket path** e **subnet ID** por suas informações.

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

## Inicializar a sessão do Trino para Delta Lake
<a name="Deltainitialize-trino"></a>

Inicializar uma sessão do Trino, execute o comando a seguir

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

## Gravar em uma tabela do Delta Lake
<a name="Deltatrino-write-table"></a>

Crie e grave na tabela com os seguintes comandos 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');
```

## Ler uma tabela do Delta Lake
<a name="Deltatrino-read-table"></a>

Leia a tabela com o seguinte comando SQL:

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

# Usar um cluster do Delta Lake com o Spark
<a name="Deltausing-cluster-spark"></a>

A partir da versão 6.9.0 do Amazon EMR, é possível usar o Delta Lake com seu cluster do Spark sem a necessidade de ações de bootstrap. Nas versões 6.8.0 e anteriores do Amazon EMR, é possível usar ações de bootstrap para pré-instalar as dependências necessárias. 

Os exemplos a seguir usam o AWS CLI para trabalhar com o Delta Lake em um cluster do Amazon EMR Spark. 

Para usar o Delta Lake no Amazon EMR com o AWS Command Line Interface, primeiro crie um cluster. Para obter informações sobre como especificar a classificação Delta Lake com AWS Command Line Interface, consulte [Forneça uma configuração usando o AWS Command Line Interface ao criar um cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) ou [Forneça uma configuração com o Java SDK ao criar um cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk).

1. Crie um arquivo `configurations.json`, com o seguinte conteúdo:

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

1. Crie um cluster com a configuração a seguir, substituindo o **bucket path** do Amazon S3 de exemplo e a **subnet ID** por suas informações.

   ```
   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, é possível criar um cluster do Amazon EMR e uma aplicação Spark com os seguintes arquivos como dependências JAR em um trabalho do 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**  
Se você usa o Amazon EMR versões 7.0.0 ou superiores, use `/usr/share/aws/delta/lib/delta-spark.jar` em vez de. `/usr/share/aws/delta/lib/delta-core.jar`

   Para obter mais informações, consulte [Submitting Applications](https://spark.apache.org/docs/latest/submitting-applications.html#submitting-applications).

   Para incluir uma dependência de jar no trabalho do Spark, é possível adicionar as seguintes propriedades de configuração à aplicação 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 obter mais informações sobre as dependências de trabalhos do Spark, consulte [Dependency Management](https://spark.apache.org/docs/latest/running-on-kubernetes.html#dependency-management).

   Se você usa o Amazon EMR versões 7.0.0 ou superiores, adicione a configuração em vez disso. `/usr/share/aws/delta/lib/delta-spark.jar`

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

## Inicializar uma sessão do Spark para Delta Lake
<a name="Deltainitialize-spark-session"></a>

Os exemplos a seguir mostram como iniciar o shell interativo do Spark, usar o envio do Spark ou usar os Cadernos do Amazon EMR para trabalhar com o Delta Lake no Amazon EMR.

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

1. Conectar-se ao nó primário usando SSH. Para obter mais informações, consulte [Connect to the primary node using SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) no *Guia de gerenciamento do Amazon EMR*.

1. Digite o seguinte comando para iniciar o shell do Spark. Para usar a PySpark concha, `spark-shell` substitua por`pyspark`.

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

   Se você executa as versões 6.15.0 ou superiores do Amazon EMR, você também deve usar as configurações a seguir para utilizar o controle de acesso refinado baseado no Lake Formation com o 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. Conectar-se ao nó primário usando SSH. Para obter mais informações, consulte [Connect to the primary node using SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) no *Guia de gerenciamento do Amazon EMR*.

1. Insira o comando a seguir para iniciar a sessão do Spark no 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"
   ```

   Se você executa as versões 6.15.0 ou superiores do Amazon EMR, você também deve usar as configurações a seguir para utilizar o controle de acesso refinado baseado no Lake Formation com o 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 inicializar uma sessão do Spark usando Cadernos do Amazon EMR Studio, configure a sessão do Spark usando o comando magic **%%configure** no Caderno do Amazon EMR, como no exemplo a seguir. Para obter mais informações, consulte [Use EMR Notebooks magics](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html#emr-magics) no *Guia de gerenciamento do Amazon EMR*.

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

Se você executa as versões 6.15.0 ou superiores do Amazon EMR, você também deve usar as configurações a seguir para utilizar o controle de acesso refinado baseado no Lake Formation com o 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"
  }
}
```

------

## Gravar em uma tabela do Delta Lake
<a name="Deltawrite-to-table"></a>

O exemplo a seguir mostra como criar um DataFrame e gravá-lo como um conjunto de dados do Delta Lake. O exemplo mostra como trabalhar com conjuntos de dados com o shell Spark enquanto estiver conectado ao nó primário usando SSH como usuário padrão do hadoop. 

**nota**  
Para colar exemplos de código no shell do Spark, digite :paste no prompt, cole o exemplo e pressione CTRL \$1 D.

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

O Spark inclui um shell baseado em Python, `pyspark`, que você pode usar para gerar protótipos de programas Spark gravados em Python. Assim como com `spark-shell`, invoque `pyspark` no nó primário.

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

------

## Ler uma tabela do 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;
```

------

# Use um cluster Delta Lake com Spark e Glue AWS
<a name="Deltacluster-spark-glue"></a>

Para usar o AWS Glue Catalog como Metastore para tabelas Delta Lake, crie um cluster com as etapas a seguir. Para obter informações sobre como especificar a classificação Delta Lake usando AWS Command Line Interface, consulte [Forneça uma configuração usando o AWS Command Line Interface ao criar um cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) ou [Forneça uma configuração usando o Java SDK ao criar um](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk) cluster.

**Criar um cluster Delta Lake**

1. Crie um arquivo `configurations.json`, com o seguinte conteúdo:

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

1. Crie um cluster com a configuração a seguir, substituindo **example Amazon S3 bucket path** e **subnet ID** por suas informações.

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

# Considerações e limitações
<a name="Deltaconsiderations-limitations"></a>
+ O uso do Delta Lake é compatível com as versões 6.9.0 e posteriores do Amazon EMR. É possível usar o [Apache Spark](https://aws.amazon.com/emr/features/spark/) 3.x em clusters do Amazon EMR com tabelas Delta.
+ Recomendamos usar o esquema de URI s3 para caminhos de localização do S3 em vez de s3a para melhorar a performance, a segurança e a confiabilidade. Para obter mais informações, consulte [Working with storage and file systems](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-file-systems.html).
+ Com o Amazon EMR 7.0, não há Delta Universal Format (UniForm) suporte para convert-to-Iceberg declarações.
+ Com o Amazon EMR 6.9 e 6.10, ao armazenar dados da tabela do Delta Lake no Amazon S3, os dados da coluna se tornam `NULL` após a operação de renomeação da coluna. Esse problema foi resolvido no Amazon EMR 6.11. Para obter mais informações sobre a operação experimental de renomeação de coluna, consulte [Column rename operation](https://docs.delta.io/latest/delta-batch.html#rename-columns) no guia do usuário do Delta Lake.
+ Ao usar o EMR Delta com Glue na região Pequim (cn-north-1), defina `hive.s3.endpoint` como `https://s3---cn-north-1.amazonaws.com.rproxy.govskope.ca.cn`.
+ Se você criar um banco de dados no AWS Glue Data Catalog fora do Apache Spark, o banco de dados poderá ter um campo vazio`LOCATION`. Como o Spark não permite criar bancos de dados com uma propriedade de localização vazia, você receberá o seguinte erro ao usar o Spark no Amazon EMR para criar uma tabela Delta em um banco de dados do Glue e se o banco de dados tiver uma propriedade `LOCATION` vazia:

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

  Para resolver esse problema, crie o banco de dados no Catálogo de Dados com um caminho válido e não vazio para o campo `LOCATION`. Para ver as etapas para implementar a solução, consulte [Exceção para argumento inválido ao criar uma tabela](https://docs.aws.amazon.com/athena/latest/ug/notebooks-spark-known-issues.html#notebooks-spark-known-issues-illegal-argument-exception) no *Guia do usuário do Amazon Athena*.

# Histórico de versões do Delta
<a name="Delta-release-history"></a>

A tabela a seguir informa a versão do Delta incluída em cada versão do Amazon EMR, junto com os componentes instalados com a aplicação. Para obter as versões dos componentes em cada versão, consulte a seção Versão de componentes da sua versão em [Versões 7.x do Amazon EMR](emr-release-7x.md), [Versões de lançamento 6.x do Amazon EMR](emr-release-6x.md) ou [Versões de lançamento 5.x do Amazon EMR](emr-release-5x.md).


**Informações da versão Delta**  

| Rótulo de versão do Amazon EMR | Versão Delta | Componentes instalados com o 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-aman-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. | 