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