

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.

# Acceso detallado con Lake Formation
<a name="lake-formation-fine-grained-access"></a>

Las versiones 6.15.0 y posteriores de Amazon EMR incluyen soporte para un control de acceso detallado a nivel de fila, columna o celda basado en Lake Formation. AWS Los temas de esta sección explican cómo acceder a tablas protegidas del Catálogo de datos de Glue desde trabajos de Spark en EMR o sesiones interactivas con controles de acceso detallados.

# Habilitación de Lake Formation con Amazon EMR
<a name="emr-lf-enable"></a>

Con Amazon EMR 6.15.0 y versiones posteriores, cuando ejecuta trabajos de Spark en Amazon EMR en clústeres de EC2 que acceden a los datos del catálogo de datos de AWS Glue, puede utilizarlos AWS Lake Formation para aplicar permisos a nivel de tabla, fila, columna y celda en tablas basadas en Hudi, Iceberg o Delta Lake.

En esta sección, explicamos cómo crear una configuración de seguridad y cómo configurar Lake Formation para que funcione con Amazon EMR. También explicamos cómo lanzar un clúster con la configuración de seguridad que creó para Lake Formation. 

## Paso 1: configuración de un rol en tiempo de ejecución para el clúster de EMR
<a name="emr-lf-launch-cluster"></a>

Para usar un rol en tiempo de ejecución para el clúster de EMR, debe crear una configuración de seguridad. Con una configuración de seguridad, puede aplicar opciones consistentes de seguridad, autorización y autenticación en todos sus clústeres. 

1. Cree un archivo denominado `lf-runtime-roles-sec-cfg.json` con la siguiente configuración de seguridad.

   ```
   {
       "AuthorizationConfiguration": {
           "IAMConfiguration": {
               "EnableApplicationScopedIAMRole": true,
               "ApplicationScopedIAMRoleConfiguration": {
                   "PropagateSourceIdentity": true
               }
           },
           "LakeFormationConfiguration": {
               "AuthorizedSessionTagValue": "Amazon EMR"
           }
       },
       "EncryptionConfiguration": {
   	    "EnableAtRestEncryption": false,
               "EnableInTransitEncryption": true,
               "InTransitEncryptionConfiguration": {
               "TLSCertificateConfiguration": {<certificate-configuration>}
           }
       }
   }
   ```

   El siguiente ejemplo muestra cómo usar un archivo ZIP con certificados en Amazon S3 para la configuración de certificados:
   + Un archivo ZIP con certificados en Amazon S3 actúa como proveedor de claves. (Consulte [Proporcionar certificados para el cifrado de datos en tránsito con el cifrado de Amazon EMR](emr-encryption-enable.md#emr-encryption-certificates) para ver los requisitos de certificados).

   ```
   "TLSCertificateConfiguration": {
   	"CertificateProviderType": "PEM",       
   	"S3Object": "s3://MyConfigStore/artifacts/MyCerts.zip"
    }
   ```

   El ejemplo siguiente muestra cómo usar un proveedor de claves personalizado para la configuración de certificados:
   + Se usa un proveedor de claves personalizado. (Consulte [Proporcionar certificados para el cifrado de datos en tránsito con el cifrado de Amazon EMR](emr-encryption-enable.md#emr-encryption-certificates) para ver los requisitos de certificados).

   ```
   "TLSCertificateConfiguration": {
   	"CertificateProviderType": "Custom",
   	"S3Object": "s3://MyConfig/artifacts/MyCerts.jar",
   	"CertificateProviderClass": "com.mycompany.MyCertProvider"
       }
   ```

1. A continuación, para asegurarse de que la etiqueta de sesión puede autorizar Lake Formation, establezca la propiedad `LakeFormationConfiguration/AuthorizedSessionTagValue` en `Amazon EMR`. 

1. Use el siguiente comando para crear la configuración de seguridad de Amazon EMR.

   ```
   aws emr create-security-configuration \
   --name 'iamconfig-with-iam-lf' \
   --security-configuration file://lf-runtime-roles-sec-cfg.json
   ```

   Como alternativa, puede utilizar la [consola de Amazon EMR](https://console.aws.amazon.com//emr) para crear una configuración de seguridad con ajustes personalizados.

## Paso 2: lanzar un clúster de Amazon EMR
<a name="emr-lf-launch-cluster"></a>

Ahora tiene todo listo para lanzar un clúster de EMR con la configuración de seguridad que creó en el paso anterior. Para obtener más información sobre las configuraciones de seguridad, consulte [Uso de configuraciones de seguridad para configurar la seguridad del clúster de Amazon EMR](emr-security-configurations.md) y [Roles en tiempo de ejecución para los pasos de Amazon EMR](emr-steps-runtime-roles.md).

## Paso 3: configurar permisos a nivel de columna, fila o celda basados en Lake Formation con los roles de tiempo de ejecución de Amazon EMR
<a name="emr-lf-fgac-perms"></a>

Para aplicar control de acceso detallado a nivel de columna, fila o celda con Lake Formation, el administrador del data lake debe definir `Amazon EMR` como valor de la configuración de etiqueta de sesión, `AuthorizedSessionTagValue`. Lake Formation usa esta etiqueta de sesión para autorizar a los intermediarios y proporcionar acceso al lago de datos. Puede definir esta etiqueta de sesión en la sección **Configuración de integración de aplicaciones** de la consola de Lake Formation. *123456789012*Sustitúyalo por su propio identificador. Cuenta de AWS 

## Paso 4: Configurar las subvenciones de AWS Glue and Lake Formation para las funciones de tiempo de ejecución de Amazon EMR
<a name="emr-lf-trust-policy"></a>

Para continuar con la configuración del control de acceso basado en Lake Formation con las funciones de tiempo de ejecución de Amazon EMR, debe configurar las concesiones de AWS Glue and Lake Formation para las funciones de ejecución de Amazon EMR. Para permitir que sus roles en tiempo de ejecución de IAM interactúen con Lake Formation, debe concederles acceso con `lakeformation:GetDataAccess` y`glue:Get*`.

Los permisos de Lake Formation controlan el acceso a los recursos del catálogo de datos de AWS Glue, a las ubicaciones de Amazon S3 y a los datos subyacentes en esas ubicaciones. Los permisos de la IAM controlan el acceso a Lake Formation and AWS Glue APIs y a los recursos. Aunque es posible que tenga el permiso de Lake Formation para acceder a una tabla del catálogo de datos (SELECT), la operación fallará si no tiene el permiso de IAM en la API `glue:Get*`. Para obtener más información sobre el control de acceso de Lake Formation, consulte [Información general sobre el control de acceso de Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-overview.html).

1.  Cree el archivo `emr-runtime-roles-lake-formation-policy.json` con el siguiente contenido. 

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "LakeFormationManagedAccess",
         "Effect": "Allow",
         "Action": [
           "lakeformation:GetDataAccess",
           "glue:Get*",
           "glue:Create*",
           "glue:Update*"
         ],
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

1. Cree la política de IAM relacionada.

   ```
   aws iam create-policy \
   --policy-name emr-runtime-roles-lake-formation-policy \
   --policy-document file://emr-runtime-roles-lake-formation-policy.json
   ```

1. Para asignar esta política a sus roles en tiempo de ejecución de IAM, siga los pasos que se indican en [Administración de permisos de AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html).

Ahora puede usar roles en tiempo de ejecución y Lake Formation para aplicar permisos de tabla y columna. También puede utilizar una identidad de origen para controlar las acciones y supervisar las AWS CloudTrail operaciones.

Para cada rol de IAM que vaya a utilizar como rol en tiempo de ejecución, defina la siguiente política de confianza y sustituya `EMR_EC2_DefaultRole` por el rol de perfil de instancia. Para modificar la política de confianza de un rol de IAM, consulte [Modificación de una política de confianza de rol](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-console.html).

```
{
   "Sid":"AllowAssumeRole",
   "Effect":"Allow",
   "Principal":{
     "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole"
   },
   "Action":[
        "sts:AssumeRole",
        "sts:TagSession"
       ]
 }
```

Para ver un end-to-end ejemplo detallado, consulte [Introducción a las funciones de tiempo de ejecución para los pasos de Amazon EMR.](https://aws.amazon.com/blogs/big-data/introducing-runtime-roles-for-amazon-emr-steps-use-iam-roles-and-aws-lake-formation-for-access-control-with-amazon-emr/)<a name="iceberg-with-lake-formation-spark-catalog-integration-lf-ec2"></a>

Para obtener información sobre cómo integrarse con Iceberg y AWS Glue Data Catalog para una jerarquía de varios catálogos, consulte [Configurar Spark para acceder a una jerarquía de varios catálogos en AWS Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html#emr-lakehouse-using-spark-access).

# Compatibilidad con el formato de tabla abierta
<a name="emr-lf-fgac1"></a>

Las versiones 6.15.0 y posteriores de Amazon EMR incluyen compatibilidad AWS Lake Formation con un control de acceso detallado basado en tablas de Hive, Apache Iceberg, Apache Hudi y Delta Lake al leer y escribir datos con Spark SQL. Amazon EMR es compatible con el control de acceso a nivel de tabla, fila, columna y celda con Apache Hudi. Las versiones de Amazon EMR 6.15.0 y posteriores incluyen compatibilidad con el control de acceso detallado a nivel de fila, columna o celda mediante AWS Lake Formation. A partir de EMR 7.12, las operaciones de DML y DDL que modifican los datos de las tablas son compatibles con las tablas de Apache Hive, Apache Iceberg y Delta Lake que utilizan las credenciales vendidas de Lake Formation. 

Los temas de esta sección tratan sobre cómo puede acceder a las tablas registradas de Lake Formation en formatos de tablas abiertas desde trabajos de EMR Spark o sesiones interactivas con un control de acceso detallado.

## Requisitos del permiso
<a name="emr-lf-perm"></a>

### Las tablas no están registradas AWS Lake Formation
<a name="emr-lf-tbl-reg"></a>

En el caso de las tablas no registradas AWS Lake Formation, el rol de tiempo de ejecución del trabajo accede tanto al catálogo de datos de AWS Glue como a los datos de la tabla subyacente en Amazon S3. Esto requiere que el rol de ejecución del trabajo tenga los permisos de IAM adecuados para las operaciones de AWS Glue y Amazon S3. 

### Tablas registradas en AWS Lake Formation
<a name="emr-lf-tbl-not-reg"></a>

En el caso de las tablas registradas con AWS Lake Formation, el rol de ejecución del trabajo accede a los metadatos del catálogo de datos de AWS Glue, mientras que las credenciales temporales que vende Lake Formation acceden a los datos de la tabla subyacente en Amazon S3. Los permisos de Lake Formation necesarios para ejecutar una operación dependen del catálogo de datos de AWS Glue y de las llamadas a la API de Amazon S3 que inicie el trabajo de Spark y se pueden resumir de la siguiente manera:
+ El permiso **DESCRIBE** permite al rol de ejecución leer los metadatos de una tabla o base de datos en el catálogo de datos
+ El permiso **ALTER** permite al rol de ejecución modificar los metadatos de una tabla o base de datos en el catálogo de datos
+ El permiso **DROP** permite al rol de ejecución eliminar metadatos de tablas o bases de datos del catálogo de datos
+ El permiso **SELECT** permite al rol de ejecución leer datos de tablas de Amazon S3
+ El permiso **INSERT** permite al rol de ejecución escribir datos de tablas en Amazon S3
+ El permiso **DELETE** permite al rol de ejecución eliminar los datos de la tabla de Amazon S3
**nota**  
Lake Formation evalúa los permisos de forma perezosa cuando un trabajo de Spark llama a AWS Glue para recuperar los metadatos de la tabla y a Amazon S3 para recuperar los datos de la tabla. Los trabajos que utilizan un rol en tiempo de ejecución con permisos insuficientes no fallarán hasta que Spark realice una llamada a AWS Glue o Amazon S3 que requiera el permiso faltante.

**nota**  
En la siguiente matriz de tablas compatibles:   
Las operaciones marcadas como **compatibles** utilizan exclusivamente las credenciales de Lake Formation para acceder a los datos de las tablas registradas en Lake Formation. Si los permisos de Lake Formation son insuficientes, la operación no recurrirá a las credenciales del rol en tiempo de ejecución. En el caso de las tablas no registradas en Lake Formation, las credenciales del rol de ejecución del trabajo acceden a los datos de la tabla.
Las operaciones marcadas como **compatibles con los permisos de IAM en la ubicación de Amazon S3** no utilizan las credenciales de Lake Formation para acceder a los datos de las tablas subyacentes en Amazon S3. Para ejecutar estas operaciones, el rol de ejecución del trabajo debe tener los permisos de IAM de Amazon S3 necesarios para acceder a los datos de la tabla, independientemente de si la tabla está registrada en Lake Formation.

------
#### [ Hive ]

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

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

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

**Configuración de Spark para Iceberg:** si desea utilizar el formato Iceberg, establezca las siguientes configuraciones. Reemplace `DB_LOCATION` por la ruta de Amazon S3 en la que se encuentran las tablas de Iceberg y reemplace los marcadores de posición de región e ID de cuenta por sus propios valores.

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

Si desea usar el formato Iceberg en versiones anteriores de EMR, use el siguiente 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
```

**Ejemplos**:

Estos son algunos ejemplos de cómo trabajar con tablas 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/es_es/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**Configuración de Spark para Hudi:**

Para iniciar el shell de Spark en EMR 7.10 o superior, use el siguiente 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
```

Para iniciar el shell de Spark en versiones anteriores de EMR, en cambio, use el siguiente comando:

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

**Ejemplos**:

Estos son algunos ejemplos de cómo trabajar con tablas 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;
```

Para consultar la última instantánea de copy-on-write las tablas:

```
SELECT * FROM my_hudi_cow_table
```

```
spark.read.table("my_hudi_cow_table")
```

Para conocer los datos compactados más recientes de las tablas `MOR`, puede consultar la tabla optimizada para lectura que tiene el sufijo `_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/es_es/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**Configuración de Spark para Delta Lake:**

Para usar Delta Lake con Lake Formation en EMR 7.10 y versiones posteriores, ejecute el siguiente comando:

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

Para usar Delta Lake con Lake Formation en EMR 6.15 a 7.9, ejecute lo siguiente:

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

Si quiere que Lake Formation utilice el servidor de registros para administrar su catálogo de Spark, establezca `spark.sql.catalog.<managed_catalog_name>.lf.managed` en verdadero.

**Ejemplos**:

Estos son algunos ejemplos de cómo trabajar con tablas de 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 *;
```

**Creación de una tabla de Delta Lake en AWS Glue Data Catalog**

Amazon EMR with Lake Formation no admite los comandos DDL ni la creación de tablas Delta en las versiones de EMR anteriores a la 7.12. Siga estos pasos para crear tablas en el catálogo de datos de AWS Glue.

1. Cree una tabla Delta con el siguiente ejemplo. Asegúrese de que su ubicación de S3 exista.

   ```
   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. Para ver los detalles de la tabla, vaya a [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. En el menú de navegación de la izquierda, expanda el **Catálogo de datos**, elija **Tablas** y, a continuación, elija la tabla que ha creado. En **Esquema**, deberías ver que la tabla Delta que creaste con Spark almacena todas las columnas en un tipo de datos llamado `array<string>` in AWS Glue.

1. Para definir filtros a nivel de columna y celda en Lake Formation, elimine la columna `col` del esquema y, a continuación, agregue las columnas que están en el esquema de la tabla. En este ejemplo, añada las columnas `x`, `y` y `z`.

------

Con esta función, puedes ejecutar consultas de instantáneas en copy-on-write las tablas para consultar la última instantánea de la tabla en un instante de confirmación o compactación determinado. Actualmente, un clúster de Amazon EMR habilitado para Lake Formation debe recuperar la columna de tiempo de confirmación de Hudi para realizar consultas incrementales y consultas de viajes en el tiempo. No es compatible con la sintaxis `timestamp as of` de Spark ni con la función `Spark.read()`. La sintaxis correcta es `select * from table where _hoodie_commit_time <= point_in_time`. Para obtener más información, consulte la tabla [Consultas sobre viajes en el tiempo puntuales en Hudi](https://cwiki.apache.org/confluence/display/HUDI/RFC+-+07+%3A+Point+in+time+Time-Travel+queries+on+Hudi+table).

**nota**  
El rendimiento de las lecturas en los clústeres de Lake Formation puede ser más lento debido a las optimizaciones que no se admiten. Estas características incluyen la lista de archivos basada en los metadatos de Hudi y la omisión de datos. Recomendamos probar el rendimiento de su aplicación para asegurarse de que cumple con los requisitos.

# Trabajo con las vistas del Catálogo de datos de Glue en Amazon EMR
<a name="SECTION-jobs-glue-data-catalog-views-ec2"></a>

**nota**  
La creación y administración de vistas del catálogo de datos de AWS Glue para su uso con EMR en EC2 está disponible con Amazon [EMR](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-7100-release.html) versión 7.10.0 y versiones posteriores.

Puede crear y gestionar vistas en el catálogo de datos de AWS Glue para utilizarlas con EMR en EC2. Estas se conocen comúnmente como vistas del catálogo de datos de AWS Glue. Estas vistas son útiles porque admiten varios motores de consultas SQL, por lo que puede acceder a la misma vista en distintos AWS servicios, como EMR en EC2 y Amazon Amazon Athena Redshift.

Al crear una vista en el catálogo de datos, puede utilizar las concesiones de recursos y los controles de acceso basados en etiquetas AWS Lake Formation para conceder el acceso a ella. Con este método de control de acceso, no tiene que configurar el acceso adicional a las tablas a las que hizo referencia en el momento de crear la vista. Este método de concesión de permisos se denomina semántica del definidor y estas vistas se denominan vistas del definidor. Para obtener más información sobre el control de acceso en Lake Formation, consulte [Concesión y revocación de permisos sobre los recursos del catálogo de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) en la Guía para desarrolladores de AWS Lake Formation.

Las vistas del Catálogo de datos son útiles para los siguientes casos de uso:
+ **Control de acceso detallado**: puede crear una vista que restrinja el acceso a los datos en función de los permisos que necesite el usuario. Por ejemplo, puede usar las vistas del catálogo de datos para evitar que el personal que no trabaje en el departamento de Recursos Humanos (RR.HH.) vea información de identificación personal (PII).
+ **Definición de vista completa**: aplicar determinados filtros a la vista del Catálogo de datos garantiza que los registros de datos disponibles en una vista del Catálogo de datos estén siempre completos.
+ **Seguridad mejorada**: la definición de consulta utilizada para crear la vista debe estar completa. Esta ventaja significa que las vistas del Catálogo de datos son menos susceptibles a los comandos SQL de actores malintencionados.
+ **Compartir datos de forma sencilla**: comparta datos con otras AWS cuentas sin moverlos. Para obtener más información, consulte [Uso compartido entre cuentas en Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html).

## Creación de una vista del catálogo de datos
<a name="SECTION-jobs-glue-data-catalog-views-create-ec2"></a>

Existen diferentes formas de crear una vista del Catálogo de datos. Estas incluyen el uso de Spark SQL AWS CLI o Spark. A continuación, se muestran algunos ejemplos.

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

A continuación, se muestra la sintaxis para crear una vista del Catálogo de datos. Anote el tipo de vista `MULTI DIALECT`. Esto distingue la vista del Catálogo de datos de otras vistas. El predicado `SECURITY` se especifica como `DEFINER`. Esto indica una vista del Catálogo de datos con semántica `DEFINER`.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW [IF NOT EXISTS] view_name
[(column_name [COMMENT column_comment], ...) ]
[ COMMENT view_comment ]
[TBLPROPERTIES (property_name = property_value, ... )]
SECURITY DEFINER
AS query;
```

El siguiente es un ejemplo de declaración `CREATE` según la sintaxis:

```
CREATE PROTECTED MULTI DIALECT VIEW catalog_view
SECURITY DEFINER
AS
SELECT order_date, sum(totalprice) AS price
FROM source_table
GROUP BY order_date
```

También puede crear una vista en modo de ejecución de prueba mediante SQL para probar la creación de la vista sin crear realmente el recurso. El uso de esta opción da como resultado una «ejecución en seco» que valida la entrada y, si la validación se realiza correctamente, devuelve el JSON del objeto de tabla AWS Glue que representará la vista. En este caso, no se crea la vista real.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS view-sql
```

------
#### [ Using the AWS CLI ]

**nota**  
Cuando se utiliza el comando CLI, el SQL utilizado para crear la vista no se analiza. Esto puede provocar que se cree la vista, pero que las consultas no se realicen de manera correcta. Asegúrese de probar la sintaxis de SQL antes de crear la vista.

Puede utilizar los siguientes comandos CLI para crear una vista:

```
aws glue create-table --cli-input-json '{
  "DatabaseName": "database",
  "TableInput": {
    "Name": "view",
    "StorageDescriptor": {
      "Columns": [
        {
          "Name": "col1",
          "Type": "data-type"
        },
        ...
        {
          "Name": "col_n",
          "Type": "data-type"
        }
      ],
      "SerdeInfo": {}
    },
    "ViewDefinition": {
      "SubObjects": [
        "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-table1",
        ...
        "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-tableN",
       ],
      "IsProtected": true,
      "Representations": [
        {
          "Dialect": "SPARK",
          "DialectVersion": "1.0",
          "ViewOriginalText": "Spark-SQL",
          "ViewExpandedText": "Spark-SQL"
        }
      ]
    }
  }
}'
```

------

## Operaciones de vista admitidas
<a name="SECTION-jobs-glue-data-catalog-views-supported-operations-ec2"></a>

Los siguientes fragmentos de comandos muestran varias formas de trabajar con las vistas del Catálogo de datos:
+ **CREATE VIEW**

  Crea una vista del Catálogo de datos. El siguiente es un ejemplo que muestra cómo crear una vista a partir de una tabla existente:

  ```
  CREATE PROTECTED MULTI DIALECT VIEW catalog_view 
  SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
  ```
+ **ALTER VIEW**

  Sintaxis disponible:
  + `ALTER VIEW view_name [FORCE] ADD DIALECT AS query`
  + `ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query`
  + `ALTER VIEW view_name DROP DIALECT`

  Puede utilizar la opción `FORCE ADD DIALECT` para forzar la actualización del esquema y los subobjetos según el nuevo dialecto del motor. Tenga en cuenta que hacer esto puede provocar errores de consulta si no utiliza también `FORCE` para actualizar otros dialectos del motor. A continuación se muestra un ejemplo:

  ```
  ALTER VIEW catalog_view FORCE ADD DIALECT
  AS
  SELECT order_date, sum(totalprice) AS price
  FROM source_table
  GROUP BY orderdate;
  ```

  A continuación se muestra cómo modificar una vista para actualizar el dialecto:

  ```
  ALTER VIEW catalog_view UPDATE DIALECT AS 
  SELECT count(*) FROM my_catalog.my_database.source_table;
  ```
+ **DESCRIBE VIEW**

  Sintaxis disponible para describir una vista:
  + `SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]`— Si el usuario tiene los permisos de AWS Glue and Lake Formation necesarios para describir la vista, puede enumerar las columnas. A continuación se muestran un par de comandos de ejemplo para mostrar columnas:

    ```
    SHOW COLUMNS FROM my_database.source_table;    
    SHOW COLUMNS IN my_database.source_table;
    ```
  + `DESCRIBE view_name`— Si el usuario tiene los permisos de AWS Glue and Lake Formation necesarios para describir la vista, puede enumerar las columnas de la vista junto con sus metadatos.
+ **DROP VIEW**

  Sintaxis disponible:
  + `DROP VIEW [ IF EXISTS ] view_name`

    El siguiente ejemplo muestra una instrucción `DROP` que comprueba si existe una vista antes de eliminarla:

    ```
    DROP VIEW IF EXISTS catalog_view;
    ```
+ **MOSTRAR, CREAR VISTA**
  + `SHOW CREATE VIEW view_name`: Muestra la instrucción SQL que crea la vista especificada. El siguiente es un ejemplo que muestra cómo crear una vista en el catálogo de datos:

    ```
    SHOW CREATE TABLE my_database.catalog_view;
    CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view (
      net_profit,
      customer_id,
      item_id,
      sold_date)
    TBLPROPERTIES (
      'transient_lastDdlTime' = '1736267222')
    SECURITY DEFINER AS SELECT * FROM
    my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
    ```
+ **SHOW VIEWS**

  Liste todas las vistas en el catálogo, como vistas regulares, vistas multidialecto (MDV) y MDV sin dialecto de Spark. La sintaxis disponible es la siguiente:
  + `SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]`:

    A continuación se muestra un comando de ejemplo para mostrar vistas:

    ```
    SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
    ```

Para obtener más información sobre la creación y configuración de vistas de catálogos de datos, consulte [Building AWS Glue Data Catalog views](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) en la Guía para AWS Lake Formation desarrolladores.

## Consulta de la vista del Catálogo de datos
<a name="SECTION-jobs-glue-data-catalog-views-querying-ec2"></a>

 Tras crear una vista del catálogo de datos, puede consultarla mediante un trabajo de Amazon EMR Spark que tenga activado el control de AWS Lake Formation acceso detallado. El rol de tiempo de ejecución del trabajo debe contar con el permiso de `SELECT` Lake Formation en la vista del Catálogo de datos. No es necesario conceder acceso a las tablas subyacentes a las que se hace referencia en la vista. 

Una vez que haya configurado todo, podrá consultar la vista. Por ejemplo, después de crear una aplicación de Amazon EMR en EMR Studio, puede ejecutar la siguiente consulta para acceder a una vista.

```
SELECT * from my_database.catalog_view LIMIT 10;
```

Una función útil es `invoker_principal`. Proporciona el identificador único del rol de tiempo de ejecución del trabajo de EMRS. Esto se puede usar para controlar el resultado de la vista según la entidad principal que lo invoca. Se puede usar para agregar una condición a la vista que mejore los resultados de la consulta según el rol de llamada. Para utilizar este rol, el rol de tiempo de ejecución del trabajo debe tener permiso para realizar la acción de IAM `LakeFormation:GetDataLakePrincipal`.

```
select invoker_principal();
```

Puede agregar esta función a una cláusula `WHERE`, por ejemplo, para mejorar los resultados de la consulta.

## Consideraciones y limitaciones
<a name="SECTION-jobs-glue-data-catalog-views-considerations-ec2"></a>

Tenga en cuenta lo siguiente cuando cree vistas del Catálogo de datos:
+ Solo puede crear vistas del Catálogo de datos con Amazon EMR 7.10 o superior.
+ El creador de la vista en el Catálogo de datos debe tener acceso a `SELECT` a las tablas base subyacentes a las que accede la vista. La creación de la vista en el Catálogo de datos falla si una tabla base específica tiene filtros de Lake Formation impuestos al rol del creador.
+ Las tablas base no deben tener el permiso de lago de datos `IAMAllowedPrincipals` en Lake Formation. Si está presente, se produce el error Las *vistas en varios dialectos solo pueden hacer referencia a tablas* sin los permisos del director. IAMAllowed
+ La ubicación de Amazon S3 de la tabla debe estar registrada como ubicación de lago de datos de Lake Formation. Si la tabla no está registrada, se produce el error *Las vistas de múltiples dialectos solo pueden hacer referencia a tablas administradas por Lake Formation*. Para obtener información sobre cómo registrar ubicaciones de Amazon S3 en Lake Formation, consulte [Registrar una ubicación de Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) en la Guía para AWS Lake Formation desarrolladores.
+ Solo puede crear vistas del catálogo de datos `PROTECTED`. No se admiten las vistas `UNPROTECTED`.
+ No puede hacer referencia a las tablas de otra AWS cuenta en una definición de vista del catálogo de datos. Tampoco se puede hacer referencia a una tabla de la misma cuenta que esté en una región distinta.
+ Para compartir datos entre cuentas o regiones, toda la vista debe compartirse entre cuentas y regiones, mediante los enlaces de recursos de Lake Formation.
+ No se admiten las funciones definidas por el usuario (UDFs).
+ Puede utilizar vistas basadas en tablas de Iceberg. También se admiten los formatos de tabla abierta de Apache Hudi y Delta Lake.
+ No puede hacer referencia a otras vistas en las vistas del catálogo de datos.
+ Un esquema de vista del catálogo de datos de AWS Glue siempre se almacena en minúsculas. Por ejemplo, si utiliza una instrucción DDL para crear una vista del Catálogo de datos de Glue con una columna denominada `Castle`, la columna creada en el Catálogo de datos de Glue aparecerá en minúsculas en `castle`. Si luego especifica el nombre de columna en una consulta DML como `Castle` o `CASTLE`, EMR Spark usará minúsculas en el nombre para que ejecute la consulta. Sin embargo, el encabezado de la columna se mostrará de la forma en que lo haya especificado en la consulta. 

  Si desea que una consulta tire error si el nombre de una columna especificado en la consulta DML no coincide con el nombre de la columna del Catálogo de datos de Glue, puede configurar `spark.sql.caseSensitive=true`.

# Consideraciones sobre Amazon EMR con Lake Formation
<a name="emr-lf-limitations-cont"></a>

Amazon EMR con Lake Formation está disponible en todas las [regiones disponibles](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-region.html).

## Consideraciones para Amazon EMR con Lake Formation en la versión 7.9 y anteriores
<a name="emr-lf-limitations-early"></a>

Tenga en cuenta lo siguiente cuando lo utilice AWS Lake Formation en EMR 7.9 y versiones anteriores.
+ El [control de acceso detallado](emr-lf-enable.md#emr-lf-fgac-perms) a nivel de fila, columna y celda está disponible en los clústeres con las versiones 6.15 y posteriores de Amazon EMR.
+ Los usuarios con acceso a una tabla pueden acceder a todas las propiedades de esa tabla. Si tiene un control de acceso basado en Lake Formation en una tabla, revísela para asegurarse de que las propiedades no contengan ningún dato o información confidencial.
+ Los clústeres de Amazon EMR con Lake Formation no admiten el uso alternativo de HDFS cuando Spark recopile estadísticas de tablas. Por lo general, esto ayuda a optimizar el rendimiento de las consultas.
+ Las operaciones compatibles con los controles de acceso basados en Lake Formation con tablas no gobernadas de Apache Spark incluyen `INSERT INTO` y `INSERT OVERWRITE`.
+ Las operaciones que admiten los controles de acceso basados en Lake Formation con Apache Spark y Apache Hive incluyen `SELECT`, `DESCRIBE`,`SHOW DATABASE`, `SHOW TABLE`, `SHOW COLUMN` y `SHOW PARTITION`.
+ Amazon EMR no es compatible con el control de acceso a las siguientes operaciones basadas en Lake Formation: 
  + Escribe en tablas gobernadas
  + Amazon EMR no es compatible con `CREATE TABLE`. Amazon EMR 6.10.0 y versiones posteriores es compatible con `ALTER TABLE`.
  + Instrucciones DML distintas de los comandos `INSERT`.
+ Existen diferencias de rendimiento entre la misma consulta con y sin control de acceso basado en Lake Formation.
+ Solo puede utilizar Amazon EMR con Lake Formation para trabajos de Spark.
+ La propagación de identidades de confianza no funciona con jerarquías de múltiples catálogos en Catálogo de datos de Glue. Para obtener más información, consulte [Trabajar con una jerarquía de varios catálogos en AWS Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html).

## Consideraciones para Amazon EMR con Lake Formation en la versión 7.10 y posteriores
<a name="emr-lf-limitations"></a>

Tenga en cuenta lo siguiente cuando utilice Amazon EMR con AWS Lake Formation EMR 7.10 y versiones posteriores.
+ Amazon EMR admite controles de acceso detallados mediante Lake Formation únicamente para tablas de Apache Hive, Apache Iceberg, Apache Delta y Apache Hudi. Los formatos de Apache Hive incluyen Parquet, ORC y xSV CSV. 
+ En aplicaciones habilitadas para Lake Formation, Spark escribe los registros en Amazon S3 en dos grupos: registros de espacio del sistema y registros de espacio de usuario. Los registros de espacio del sistema pueden incluir información sensible, como el esquema completo de la tabla. Para proteger estos datos, Amazon EMR guarda los registros de espacio del sistema en una ubicación distinta de los registros de espacio de usuario. Se recomienda enfáticamente que los administradores de la cuenta no otorguen acceso a los registros de espacio del sistema.
+ Cuando registra la ubicación de una tabla en Lake Formation, los permisos del rol usado para registrar la tabla controlan por completo el acceso a los datos, en lugar del rol de tiempo de ejecución del trabajo de Amazon EMR. Si el rol de registro está configurado de forma incorrecta, los trabajos que intenten acceder a la tabla fallarán.
+ No puede desactivar `DynamicResourceAllocation` para los trabajos de Lake Formation.
+ Solo puede utilizar Lake Formation con trabajos de Spark.
+ Amazon EMR con Lake Formation admite únicamente una sesión de Spark durante todo el trabajo.
+ Amazon EMR con Lake Formation solo admite consultas de tablas entre cuentas compartidas a través de enlaces de recursos.
+ Lo siguiente no es compatible:
  + Conjuntos de datos distribuidos resilientes (RDD)
  + Streaming de Spark
  + Lectura con permisos concedidos de Lake Formation
  + Control de acceso para columnas anidadas
+ Amazon EMR bloquea las funcionalidades que podrían socavar el aislamiento total del controlador del sistema, incluidas las siguientes:
  + UDTs, Hive UDFs y cualquier función definida por el usuario que incluya clases personalizadas
  + Orígenes de datos personalizados
  + Suministro de archivos jar adicionales para la extensión, el conector o el metaalmacén de Spark
  + `ANALYZE TABLE` command
+ Para hacer cumplir los controles de acceso, `EXPLAIN PLAN` y las operaciones de DDL, como `DESCRIBE TABLE`, no exponen información restringida.
+ Amazon EMR restringe el acceso a los registros de Spark del controlador del sistema en las aplicaciones habilitadas para Lake Formation. Dado que el controlador del sistema se ejecuta permisos elevados, los eventos y registros que genera el controlador del sistema pueden incluir información confidencial. Para impedir que usuarios no autorizados o código no autorizado accedan a esta información confidencial, Amazon EMR deshabilita el acceso a los registros del controlador del sistema.

  Los registros de los perfiles del sistema siempre se conservan en el almacenamiento administrado; esta es una configuración obligatoria que no se puede deshabilitar. Estos registros se almacenan de forma segura y se cifran mediante una clave de KMS gestionada por el cliente o una clave de KMS AWS gestionada. 

  Si su aplicación de Amazon EMR se encuentra en una subred privada con puntos de enlace de VPC para Amazon S3 y adjunta una política de puntos de enlace para controlar el acceso, antes de que sus trabajos puedan enviar datos de registro a AWS Amazon S3 gestionado, debe incluir los permisos detallados en [Almacenamiento gestionado](logging.html#jobs-log-storage-managed-storage) en su política de VPC al punto de enlace de puerta de enlace de S3. Para solicitudes de solución de problemas, póngase en contacto con el soporte. AWS 
+ Si ha registrado una ubicación de tabla en Lake Formation, la ruta de acceso a los datos pasa por las credenciales almacenadas de Lake Formation, independientemente del permiso de IAM para el rol de tiempo de ejecución de trabajos de Amazon EMR. Si configura incorrectamente el rol registrado con la ubicación de la tabla, los trabajos enviados que usen el rol con permisos de IAM de S3 para la ubicación de la tabla fallarán.
+ Para escribir en una tabla de Lake Formation se utiliza el permiso de IAM en lugar de los permisos concedidos por Lake Formation. Si el rol de tiempo de ejecución de su trabajo tiene los permisos de S3 necesarios, puede usarlo para ejecutar operaciones de escritura.

A continuación, se indican las consideraciones y limitaciones cuando se utiliza Apache Iceberg:
+ Solo puede usar Apache Iceberg con el catálogo de sesiones y no con catálogos con nombres arbitrarios.
+ Las tablas de Iceberg que están registradas en Lake Formation solo admiten las tablas de metadatos `history`, `metadata_log_entries`, `snapshots`, `files`, `manifests` y `refs`. Amazon EMR oculta las columnas que pueden contener datos confidenciales, como `partitions`, `path` y `summaries`. Esta limitación no se aplica a las tablas de Iceberg que no estén registradas en Lake Formation.
+ Las tablas que no se registran en Lake Formation admiten todos los procedimientos almacenados de Iceberg. Los procedimientos `register_table` y `migrate` no son compatibles con ninguna tabla.
+ Le recomendamos que utilice Iceberg DataFrameWriter V2 en lugar de V1.

## Consideraciones sobre Amazon EMR con Lake Formation para la versión 7.12 y versiones posteriores
<a name="emr-lf-limit-712"></a>

### General
<a name="emr-lf-limits-g"></a>

Revise las siguientes limitaciones al utilizar Lake Formation con Amazon EMR.
+ No puede desactivar `DynamicResourceAllocation` para los trabajos de Lake Formation.
+ Solo puede utilizar Lake Formation con trabajos de Spark.
+ Amazon EMR con Lake Formation admite únicamente una sesión de Spark durante todo el trabajo.
+ Amazon EMR con Lake Formation solo admite consultas de tablas entre cuentas compartidas a través de enlaces de recursos.
+ Lo siguiente no es compatible:
  + Conjuntos de datos distribuidos resilientes (RDD)
  + Streaming de Spark
  + Control de acceso para columnas anidadas
+ Amazon EMR bloquea las funcionalidades que podrían socavar el aislamiento total del controlador del sistema, incluidas las siguientes:
  + UDTs, Hive UDFs y cualquier función definida por el usuario que incluya clases personalizadas
  + Orígenes de datos personalizados
  + Suministro de archivos jar adicionales para la extensión, el conector o el metaalmacén de Spark
  + `ANALYZE TABLE` command
+ Si su aplicación de Amazon EMR se encuentra en una subred privada con puntos de enlace de VPC para Amazon S3 y adjunta una política de puntos de enlace para controlar el acceso, antes de que sus trabajos puedan enviar datos de registro a AWS Amazon S3 gestionado, debe incluir los permisos detallados en [Almacenamiento gestionado](logging.html#jobs-log-storage-managed-storage) en su política de VPC al punto de enlace de puerta de enlace de S3. Para solicitudes de solución de problemas, póngase en contacto con el soporte. AWS 
+ A partir de Amazon EMR 7.9.0, el FGAC de Spark es compatible con el AFile sistema S3 cuando se utiliza con el esquema s3a://.
+ Amazon EMR 7.11 admite la creación de tablas administradas mediante CTAS.
+ Amazon EMR 7.12 admite la creación de tablas administradas y externas mediante CTAS.

## Permisos
<a name="emr-lf-permissions"></a>
+ Para hacer cumplir los controles de acceso, las operaciones EXPLAIN, PLAN y DDL, como DESCRIBE TABLE, no exponen información restringida.
+ Al registrar la ubicación de una tabla en Lake Formation, el acceso a los datos utiliza las credenciales almacenadas de Lake Formation en lugar de los permisos de IAM del rol de ejecución de tareas EMR Serverless. Los trabajos fallarán si el rol registrado para la ubicación de la tabla está mal configurado, incluso cuando el rol en tiempo de ejecución tenga permisos de IAM de S3 para esa ubicación.
+ A partir de Amazon EMR 7.12, puede escribir en las tablas Hive e Iceberg existentes utilizando DataFrameWriter (V2) con las credenciales de Lake Formation en modo de adición. Para las operaciones de sobrescritura o al crear nuevas tablas, EMR utiliza las credenciales del rol en tiempo de ejecución para modificar los datos de la tabla.
+ Se aplican las siguientes limitaciones cuando se utilizan vistas o tablas en caché como datos de origen (estas limitaciones no se aplican a las vistas del catálogo de datos de AWS Glue):
  + Para las operaciones de FUSIÓN, ELIMINACIÓN y ACTUALIZACIÓN
    + Compatible: uso de vistas y tablas almacenadas en caché como tablas de origen.
    + No se admite: usar vistas y tablas almacenadas en caché en las cláusulas de asignación y condición.
  + Para las operaciones CREATE OR REPLACE y REPLACE TABLE AS SELECT:
    + No se admite: usar vistas y tablas almacenadas en caché como tablas de origen.
+ Las tablas de Delta Lake con UDFs datos de origen admiten las operaciones MERGE, DELETE y UPDATE solo cuando el vector de eliminación está activado.

## Registros y depuración
<a name="emr-lf-logs-debugging"></a>
+ Amazon EMR restringe el acceso a los registros de Spark del controlador del sistema en las aplicaciones habilitadas para Lake Formation. Dado que el controlador del sistema se ejecuta permisos elevados, los eventos y registros que genera el controlador del sistema pueden incluir información confidencial. Para impedir que usuarios no autorizados o código no autorizado accedan a esta información confidencial, Amazon EMR deshabilita el acceso a los registros del controlador del sistema.

  Los registros de los perfiles del sistema siempre se conservan en el almacenamiento administrado; esta es una configuración obligatoria que no se puede deshabilitar. Estos registros se almacenan de forma segura y se cifran mediante una clave de KMS gestionada por el cliente o una clave de KMS AWS gestionada. 

## Iceberg
<a name="emr-lf-iceberg-considerations"></a>

Tenga en cuenta las siguientes consideraciones al utilizar Apache Iceberg:
+ Solo puede usar Apache Iceberg con el catálogo de sesiones y no con catálogos con nombres arbitrarios.
+ Las tablas de Iceberg que están registradas en Lake Formation solo admiten las tablas de metadatos `history`, `metadata_log_entries`, `snapshots`, `files`, `manifests` y `refs`. Amazon EMR oculta las columnas que pueden contener datos confidenciales, como `partitions`, `path` y `summaries`. Esta limitación no se aplica a las tablas de Iceberg que no estén registradas en Lake Formation.
+ Las tablas que no están registradas en Lake Formation admiten todos los procedimientos almacenados por Iceberg. Los procedimientos `register_table` y `migrate` no son compatibles con ninguna tabla.
+ Le sugerimos que utilice Iceberg DataFrameWriter V2 en lugar de V1.

# API de control de acceso nativa y detallada de Spark incluida en la lista de permisos PySpark
<a name="clean-rooms-spark-fgac-pyspark-api-allowlist"></a>

Para mantener la seguridad y los controles de acceso a los datos, el control de acceso detallado (FGAC) de Spark restringe determinadas funciones. PySpark Estas restricciones se aplican mediante:
+ Bloqueo explícito que impide la ejecución de funciones
+ Incompatibilidades de arquitectura que hacen que las funciones no funcionen
+ Funciones que pueden generar errores, devolver mensajes de acceso denegado o no hacer nada al ser llamadas

El FGAC de Spark no admite las siguientes PySpark funciones:
+ Operaciones de RDD (bloqueadas con la excepción de Spark) RDDUnsupported
+ Spark Connect (no compatible)
+ Spark Streaming (no compatible)

Si bien hemos probado las funciones enumeradas en un entorno FGAC nativo de Spark y hemos confirmado que funcionan según lo esperado, nuestras pruebas suelen cubrir solo el uso básico de cada API. Las funciones con varios tipos de entrada o rutas lógicas complejas pueden tener escenarios no probados.

Para cualquier función que no figure aquí y que no forme parte claramente de las categorías no admitidas anteriores, recomendamos:
+ Pruébelas primero en un entorno gamma o en una implementación a pequeña escala
+ Verificar su comportamiento antes de usarlos en producción

**nota**  
Si ves un método de clase en la lista pero no su clase base, el método debería seguir funcionando; solo significa que no hemos verificado explícitamente el constructor de la clase base.

La PySpark API está organizada en módulos. El soporte general para los métodos de cada módulo se detalla en la siguiente tabla.


| Nombre del módulo | Status | Notas | 
| --- | --- | --- | 
|  pyspark\$1core  |   compatible  |  Este módulo contiene las principales clases de RDD y, en su mayoría, estas funciones no son compatibles.  | 
|  pyspark\$1sql  |   compatible  |  | 
|  pyspark\$1testing  |   compatible  |  | 
|  pyspark\$1resource  |   compatible  |  | 
|  pyspark\$1streaming  |  Blocked  |  El uso del streaming está bloqueado en Spark FGAC.  | 
|  pyspark\$1mllib  |  Experimental  |  Este módulo contiene operaciones de aprendizaje automático basadas en RDD y, en su mayoría, estas funciones no son compatibles. Este módulo no se ha probado exhaustivamente.  | 
|  pyspark\$1ml  |  Experimental  |  Este módulo contiene operaciones de aprendizaje automático DataFrame basadas en el aprendizaje automático, y estas funciones son compatibles en su mayoría. Este módulo no se ha probado exhaustivamente.  | 
|  pyspark\$1pandas  |   compatible  |    | 
|  pyspark\$1pandas\$1slow  |   compatible  |    | 
| pyspark\$1connect |  Blocked  |  El uso de Spark Connect está bloqueado en Spark FGAC.  | 
| pyspark\$1pandas\$1connect |  Blocked  |  El uso de Spark Connect está bloqueado en Spark FGAC.  | 
| pyspark\$1pandas\$1slow\$1connect |  Blocked  |  El uso de Spark Connect está bloqueado en Spark FGAC.  | 
| pyspark\$1errors |  Experimental  |  Este módulo no se ha probado exhaustivamente. No se pueden utilizar clases de error personalizadas.  | 

**Lista de API permitidas**

Para obtener una lista descargable y más fácil de buscar, hay disponible un archivo con los módulos y las clases en las [funciones de Python permitidas en el FGAC nativo](samples/Python functions allowed in Native FGAC.zip).