Compatibilidad con el formato de tabla abierta - Amazon EMR

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.

Compatibilidad con el formato de tabla abierta

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

Las tablas no están registradas AWS Lake Formation

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

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
Operación AWS Lake Formation permisos Estado de Support
SELECT SELECT compatible
CREATE TABLE CREATE_TABLE compatible
CREATE TABLE LIKE CREATE_TABLA Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE AS SELECT CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
DESCRIBE TABLE DESCRIBE compatible
SHOW TBLPROPERTIES DESCRIBE compatible
SHOW COLUMNS DESCRIBE compatible
SHOW PARTITIONS DESCRIBE compatible
SHOW CREATE TABLE DESCRIBE compatible
MODIFICAR LA TABLA tablename SELECCIONAR y ALTERAR compatible
ALTERAR LA UBICACIÓN DEL tablename CONJUNTO DE TABLAS - No compatible
ALTERAR LA TABLA Y tablename AGREGAR LA PARTICIÓN SELECCIONAR, INSERTAR y ALTERAR compatible
REPARAR TABLA SELECCIONAR y ALTERAR compatible
CARGAR DATOS No compatible
INSERT INSERTAR y ALTERAR compatible
INSERT OVERWRITE SELECCIONAR, INSERTAR, ELIMINAR y ALTERAR compatible
DROP TABLE SELECCIONAR, SOLTAR, ELIMINAR Y ALTERAR compatible
TRUNCATE TABLE SELECCIONAR, INSERTAR, ELIMINAR y ALTERAR compatible
Dataframe Writer V1 Igual que la operación SQL correspondiente

Se admite cuando se añaden datos a una tabla existente. Consulte las consideraciones y limitaciones para obtener más información

Dataframe Writer V2 Igual que la operación SQL correspondiente

Se admite cuando se añaden datos a una tabla existente. Consulte las consideraciones y limitaciones para obtener más información

Iceberg
Operación AWS Lake Formation permisos Estado de Support
SELECT SELECT compatible
CREATE TABLE CREATE_TABLE compatible
CREATE TABLE LIKE CREATE_TABLA Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE AS SELECT CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
REEMPLACE LA TABLA POR SELECCIONADA SELECCIONAR, INSERTAR y ALTERAR compatible
DESCRIBE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTER TABLE SELECCIONE, INSERTE y MODIFIQUE compatible
ALTER TABLE SET LOCATION SELECCIONAR, INSERTAR y ALTERAR Compatible con los permisos de IAM en la ubicación de Amazon S3
MODIFICAR LA ESCRITURA DE LA TABLA ORDENADA POR SELECCIONAR, INSERTAR y ALTERAR Compatible con los permisos de IAM en la ubicación de Amazon S3
MODIFICAR LA ESCRITURA DE LA TABLA DISTRIBUIDA POR SELECT, INSERT y ALTER Compatible con los permisos de IAM en la ubicación de Amazon S3
MODIFICAR LA TABLA, CAMBIAR EL NOMBRE DE LA TABLA CREATE_TABLE y DROP compatible
INSERT INTO SELECCIONAR, INSERTAR y ALTERAR compatible
INSERT OVERWRITE SELECCIONAR, INSERTAR y ALTERAR compatible
DELETE SELECCIONAR, INSERTAR y ALTERAR compatible
UPDATE SELECCIONAR, INSERTAR y ALTERAR compatible
MERGE INTO SELECCIONAR, INSERTAR y ALTERAR compatible
DROP TABLE SELECCIONAR, BORRAR y SOLTAR compatible
DataFrame Escritor V1 - No compatible
DataFrame Escritor V2 Igual que la operación SQL correspondiente

Se admite cuando se añaden datos a una tabla existente. Consulte consideraciones y limitaciones para obtener más información.

Tabla de metadatos SELECT Soportado. Algunas tablas están ocultas. Consulte consideraciones y limitaciones para obtener más información.
Procedimientos almacenados - Se admite para tablas que cumplen las siguientes condiciones:
  • Las tablas no están registradas en AWS Lake Formation

  • Tablas que no utilizan register_table y migrate

    Consulte consideraciones y limitaciones para obtener más información.

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
Operación AWS Lake Formation permisos Estado de Support
SELECT SELECT compatible
CREATE TABLE CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE LIKE CREATE_TABLE Compatible con los permisos de IAM en la ubicación de Amazon S3
CREATE TABLE AS SELECT - No compatible
DESCRIBE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW COLUMNS DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTER TABLE SELECT Compatible con los permisos de IAM en la ubicación de Amazon S3
INSERT INTO SELECCIONE y ALTERE Compatible con los permisos de IAM en la ubicación de Amazon S3
INSERT OVERWRITE SELECCIONE y ALTERE Compatible con los permisos de IAM en la ubicación de Amazon S3
DELETE - No compatible
UPDATE - No compatible
MERGE INTO - No compatible
DROP TABLE SELECCIONE y DESCARTE Compatible con los permisos de IAM en la ubicación de Amazon S3
DataFrame Escritor V1 - No compatible
DataFrame Escritor V2 Igual que la operación SQL correspondiente Compatible con los permisos de IAM en la ubicación de Amazon S3
Tabla de metadatos - No compatible
Características de mantenimiento y utilidad de la tabla - No compatible

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
Operación AWS Lake Formation permisos Estado de Support
SELECT SELECT compatible
CREATE TABLE CREATE_TABLE compatible
CREATE TABLE LIKE - No compatible
CREATE TABLE AS SELECT CREATE_TABLA compatible
REEMPLAZAR LA TABLA COMO SELECCIONADA SELECCIONAR, INSERTAR y ALTERAR compatible
DESCRIBE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW COLUMNS DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTER TABLE SELECCIONE e INSERTE compatible
ALTER TABLE SET LOCATION SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTERE EL tablename CLÚSTER DE TABLAS MEDIANTE SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTERAR LA TABLA Y tablename AÑADIR UNA RESTRICCIÓN SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
ALTERE LA RESTRICCIÓN DE ELIMINACIÓN DE tablename TABLAS SELECCIONAR e INSERTAR Compatible con los permisos de IAM en la ubicación de Amazon S3
INSERT INTO SELECCIONE e INSERTE compatible
INSERT OVERWRITE SELECCIONAR e INSERTAR compatible
DELETE SELECCIONAR e INSERTAR compatible
UPDATE SELECCIONAR e INSERTAR compatible
MERGE INTO SELECCIONAR e INSERTAR compatible
DROP TABLE SELECCIONAR, BORRAR y SOLTAR compatible
DataFrame Escritor V1 - No compatible
DataFrame Escritor V2 Igual que la operación SQL correspondiente

compatible

Características de mantenimiento y utilidad de la tabla - No compatible

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

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

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

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.