Logotipo de Zephyrnet

Interactuar con tablas de Apache Iceberg mediante Amazon Athena y permisos detallados entre cuentas mediante AWS Lake Formation

Fecha:

recientemente anunció apoyo a la Formación del lago AWS políticas de control de acceso detalladas en Atenea amazónica consultas de datos almacenados en cualquier formato de archivo compatible utilizando formatos de tabla como Apache Iceberg, Apache Hudi y Apache Hive. AWS Lake Formation le permite definir y aplicar políticas de acceso a nivel de columna, tabla y base de datos para consultar las tablas de Iceberg almacenadas en Amazon S3. Lake Formation proporciona una capa de autorización y control sobre los datos almacenados en Amazon S3. Esta capacidad requiere que actualice a Motor Athena versión 3.

Las grandes organizaciones suelen tener líneas de negocio (LoB) que funcionan con autonomía en la gestión de sus datos empresariales. Hace que compartir datos entre LoB no sea trivial. Estas organizaciones han adoptado un modelo federado, en el que cada LoB tiene autonomía para tomar decisiones sobre sus datos. Usan el modelo de editor/consumidor con una capa de gobierno centralizada que se usa para hacer cumplir los controles de acceso. Si está interesado en obtener más información sobre la arquitectura de malla de datos, visite Diseñe una arquitectura de malla de datos con AWS Lake Formation y AWS Glue. Con la versión 3 del motor Athena, los clientes pueden usar los mismos controles detallados para marcos de datos abiertos como Apache Iceberg, Apache Hudi y Apache Hive.

En esta publicación, profundizamos en un caso de uso en el que tiene un modelo de productor/consumidor con el intercambio de datos habilitado para brindar acceso restringido a una tabla de Apache Iceberg que el consumidor puede consultar. Analizaremos el filtrado de columnas para restringir ciertas filas, el filtrado para restringir el acceso a nivel de columna, la evolución del esquema y el viaje en el tiempo.

Resumen de la solución

Para ilustrar la funcionalidad de los permisos detallados para las tablas de Apache Iceberg con Athena y Lake Formation, configuramos los siguientes componentes:

  • En la cuenta del productor:
    • An Pegamento AWS Catálogo de datos para registrar el esquema de una tabla en formato Apache Iceberg
    • Lake Formation para proporcionar un acceso detallado a la cuenta del consumidor
    • Athena para verificar los datos de la cuenta del productor
  • En la cuenta del consumidor:
    • Administrador de acceso a recursos de AWS (AWS RAM) para crear un protocolo de enlace entre el catálogo de datos del productor y el consumidor
    • Lake Formation para proporcionar un acceso detallado a la cuenta del consumidor
    • Athena para verificar los datos de la cuenta del productor

El siguiente diagrama ilustra la arquitectura.

Arquitectura de permisos detallados entre cuentas

Requisitos previos

Antes de comenzar, asegúrese de tener lo siguiente:

Configuración del productor de datos

En esta sección, presentamos los pasos para configurar el productor de datos.

Cree un depósito S3 para almacenar los datos de la tabla

Creamos un nuevo depósito S3 para guardar los datos de la tabla:

  1. En la consola de Amazon S3, crear un cubo S3 con nombre único (para esta publicación, usamos iceberg-athena-lakeformation-blog).
  2. Cree la carpeta del productor dentro del depósito para usarla en la tabla.

Creación de carpetas y depósitos de Amazon S3

Registre la ruta S3 que almacena la tabla usando Lake Formation

Registramos la ruta completa S3 en Lake Formation:

  1. Navegue a la consola de Lake Formation.
  2. Si es la primera vez que inicia sesión, se le pedirá que cree un usuario administrador.
  3. En el panel de navegación, debajo Registrarse e ingerir, escoger Ubicaciones de data lake.
  4. Elige Registrar ubicacióny proporcione la ruta del depósito de S3 que creó anteriormente.
  5. Elige AWSServiceRoleForLakeFormationDataAccess para Rol de IAM.

Para obtener información adicional sobre los roles, consulte Requisitos para los roles utilizados para registrar ubicaciones.

Si habilitó el cifrado de su depósito S3, debe proporcionar permisos para que Lake Formation realice operaciones de cifrado y descifrado. Referirse a Registro de una ubicación cifrada de Amazon S3 para ayuda.

  1. Elige Registrar ubicación.

Registrar la ubicación de la formación del lago

Crear una tabla Iceberg usando Athena

Ahora vamos a crear la tabla usando Athena respaldada por el formato Apache Iceberg:

  1. En la consola de Athena, elija Editor de consultas en el panel de navegación.
  2. Si está utilizando Athena por primera vez, en Ajustes, escoger Gestiona e ingrese la ubicación del depósito S3 que creó anteriormente (iceberg-athena-lakeformation-blog/producer).
  3. Elige Guardar.
  4. En el editor de consultas, ingrese la siguiente consulta (reemplace la ubicación con el depósito S3 que registró con Lake Formation). Tenga en cuenta que usamos la base de datos predeterminada, pero puede usar cualquier otra base de datos.
CREATE TABLE consumer_iceberg (
customerid bigint,
customername string,
email string,
city string,
country string,
territory string,
contactfirstname string,
contactlastname string)
LOCATION 's3://YOUR-BUCKET/producer/' -- *** Change bucket name to your bucket***
TBLPROPERTIES ('table_type'='ICEBERG')

  1. Elige Ejecutar.

Editor de consultas Athena para crear una tabla Iceberg

Comparte la tabla con la cuenta del consumidor

Para ilustrar la funcionalidad, implementamos los siguientes escenarios:

  • Proporcionar acceso a las columnas seleccionadas
  • Proporcionar acceso a las filas seleccionadas en función de un filtro

Complete los siguientes pasos:

  1. En la consola Lake Formation, en el panel de navegación bajo Catálogo de datos, escoger Filtros de datos.
  2. Elige Crear nuevo filtro.
  3. Nombre del filtro de datos, introduzca blog_data_filter.
  4. Base de datos de destino, introduzca lf-demo-db.
  5. Tabla de destino, introduzca consumer_iceberg.
  6. Acceso a nivel de columna, seleccione Incluir columnas.
  7. Elija las columnas para compartir con el consumidor: country, address, contactfirstname, city, customerid, y customername.
  8. Expresión de filtro de fila, entrar en el filtro country='France'.
  9. Elige Crear filtro.

crear filtro de datos

Ahora vamos a otorgar acceso a la cuenta del consumidor en el consumer_iceberg mesa.

  1. En el panel de navegación, elija Mesas.
  2. Seleccione la tabla consumer_iceberg y elija Grant en Acciones .
    Otorgar acceso a la cuenta del consumidor en la tabla consumer_iceberg
  3. Seleccione Cuentas externas.
  4. Introduzca el ID de la cuenta externa.
    Otorgar permisos de datos
  5. Seleccione Recursos de catálogo de datos con nombre.
  6. Elija su base de datos y tabla.
  7. Filtros de datos, elija el filtro de datos que creó.
    Agregar filtro de datos
  8. Permisos de filtro de datos y Permisos concedidos, seleccione Seleccione.
  9. Elige Grant.

Permisos para crear subvención

Configuración del consumidor de datos

Para configurar el consumidor de datos, aceptamos el recurso compartido y creamos una tabla con AWS RAM y Lake Formation. Complete los siguientes pasos:

  1. Inicie sesión en la cuenta del consumidor y navegue hasta la consola de RAM de AWS.
  2. under Comparte conmigo en el panel de navegación, elija Recursos compartidos.
  3. Elija su recurso compartido.
    Cuota de recursos en la cuenta del consumidor
  4. Elige Aceptar recurso compartido.
  5. Anote el nombre del recurso compartido que se usará en los próximos pasos.
    Aceptar recurso compartido
  6. Navegue a la consola de Lake Formation.
  7. Si es la primera vez que inicia sesión, se le pedirá que cree un usuario administrador.
  8. Elige Bases de datos en el panel de navegación, luego elija su base de datos.
  9. En Acciones menú, seleccione Crear enlace de recursos.
    Crear un enlace de recursos
  10. Nombre del enlace de recurso, ingrese el nombre de su enlace de recursos (por ejemplo, consumer_iceberg).
  11. Elija su base de datos y tabla compartida.
  12. Elige Crear.
    Crear tabla con enlace de recursos

Validar la solución

Ahora podemos ejecutar diferentes operaciones en las tablas para validar los controles de acceso detallados.

Insertar operación

Insertemos datos en el consumer_iceberg en la cuenta del productor y valide que el filtrado de datos funcione como se esperaba en la cuenta del consumidor.

  1. Inicie sesión en la cuenta del productor.
  2. En la consola de Athena, elija Editor de consultas en el panel de navegación.
  3. Utilice el siguiente SQL para escribir e insertar datos en la tabla Iceberg. Utilice el editor de consultas para ejecutar una consulta a la vez. Puede resaltar/seleccionar una consulta a la vez y hacer clic en "Ejecutar"/"Ejecutar de nuevo:
INSERT INTO consumer_iceberg VALUES (1, 'Land of Toys Inc.', 'gladys.rim@rim.org', 'NYC','USA', 'NA', 'James', 'xxxx 118th NE'); INSERT INTO consumer_iceberg VALUES (2, 'Reims Collectables', 'yuki_whobrey@aol.com', 'Reims','France', 'EMEA', 'Josephine', 'Darakjy'); INSERT INTO consumer_iceberg VALUES (3, 'Lyon Souveniers', 'fletcher.flosi@yahoo.com', 'Paris', 'France', 'EMEA','Art', 'Venere');

Insertar datos en la tabla consumer_iceberg en la cuenta del productor

  1. Utilice el siguiente SQL para leer y seleccionar datos en la tabla Iceberg:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Ejecutar consulta de selección para validar que se insertaron filas

  1. Inicie sesión en la cuenta del consumidor.
  2. En el editor de consultas de Athena, ejecute la siguiente consulta SELECT en la tabla compartida:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Ejecutar la misma consulta en la cuenta del consumidor

Según los filtros, el consumidor tiene visibilidad de un subconjunto de columnas y filas donde el país es Francia.

Operaciones de actualización/eliminación

Ahora actualicemos una de las filas y eliminemos una del conjunto de datos compartido con el consumidor.

  1. Inicie sesión en la cuenta del productor.
  2. Actualizar city='Paris' WHERE city='Reims' y eliminar la fila customerid = 3;
    UPDATE consumer_iceberg SET city= 'Paris' WHERE city= 'Reims' ;

    Ejecutar consulta de actualización en la cuenta del productor

DELETE FROM consumer_iceberg WHERE customerid =3;

Ejecutar consulta de eliminación en la cuenta del productor

  1. Verifique el conjunto de datos actualizado y eliminado:
SELECT * FROM consumer_iceberg;

Verifique la actualización y la eliminación reflejada en la cuenta del productor

  1. Inicie sesión en la cuenta del consumidor.
  2. En el editor de consultas de Athena, ejecute la siguiente consulta SELECT en la tabla compartida:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Verifique la actualización y elimine en la cuenta del consumidor

Podemos observar que solo una fila está disponible y la ciudad se actualiza a París.

Evolución del esquema: agregar una nueva columna

Actualicemos una de las filas y eliminemos una del conjunto de datos compartido con el consumidor.

  1. Inicie sesión en la cuenta del productor.
  2. Agrega una nueva columna llamada geo_loc en la mesa Iceberg. Utilice el editor de consultas para ejecutar una consulta a la vez. Puede resaltar/seleccionar una consulta a la vez y hacer clic en "Ejecutar"/"Ejecutar de nuevo:
ALTER TABLE consumer_iceberg ADD COLUMNS (geo_loc string); INSERT INTO consumer_iceberg VALUES (5, 'Test_user', 'test_user@aol.com', 'Reims','France', 'EMEA', 'Test_user', 'Test_user', 'test_geo'); SELECT * FROM consumer_iceberg;

Agregar una nueva columna en la cuenta del productor

Para proporcionar visibilidad a los recién agregados geo_loc columna, necesitamos actualizar el filtro de datos de Lake Formation.

  1. En la consola de Lake Formation, elija Filtros de datos en el panel de navegación.
  2. Seleccione su filtro de datos y elija Editar.
    Actualizar filtro de datos
  3. under Acceso a nivel de columna, agregue la nueva columna (geo_loc).
  4. Elige Guardar.
    Agregar nueva columna al filtro de datos
  5. Inicie sesión en la cuenta del consumidor.
  6. En el editor de consultas de Athena, ejecute lo siguiente SELECT consulta en la tabla compartida:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Validar nueva columna aparece en la cuenta del consumidor

La nueva columna geo_loc es visible y una fila adicional.

Evolución del esquema: Eliminar columna

Actualicemos una de las filas y eliminemos una del conjunto de datos compartido con el consumidor.

  1. Inicie sesión en la cuenta del productor.
  2. Modifique la tabla para eliminar la columna de dirección de la tabla Iceberg. Utilice el editor de consultas para ejecutar una consulta a la vez. Puede resaltar/seleccionar una consulta a la vez y hacer clic en "Ejecutar"/"Ejecutar de nuevo:
ALTER TABLE consumer_iceberg DROP COLUMN address; SELECT * FROM consumer_iceberg;

Eliminar una columna en la cuenta del productor

Podemos observar que la dirección de la columna no está presente en la tabla.

  1. Inicie sesión en la cuenta del consumidor.
  2. En el editor de consultas de Athena, ejecute la siguiente consulta SELECT en la tabla compartida:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Validar la eliminación de columnas en la cuenta del consumidor

La dirección de la columna no está presente en la tabla.

Viaje en el tiempo

Ahora hemos cambiado la mesa Iceberg varias veces. La tabla Iceberg realiza un seguimiento de las instantáneas. Complete los siguientes pasos para explorar la funcionalidad de viaje en el tiempo:

  1. Inicie sesión en la cuenta del productor.
  2. Consulta la tabla del sistema:
SELECT * FROM "lf-demo-db"."consumer_iceberg$snapshots" limit 10;

Podemos observar que hemos generado múltiples instantáneas.

  1. Anota uno de los committed_at valores a utilizar en los próximos pasos (para este ejemplo, 2023-01-29 21:35:02.176 UTC).
    Consulta de viaje en el tiempo en la cuenta del consumidor
  2. Usa el viaje en el tiempo para encontrar la instantánea de la tabla. Utilice el editor de consultas para ejecutar una consulta a la vez. Puede resaltar/seleccionar una consulta a la vez y hacer clic en "Ejecutar"/"Ejecutar de nuevo:
SELECT * FROM consumer_iceberg FOR TIMESTAMP
AS OF TIMESTAMP '2023-01-29 21:35:02.176 UTC';

Encuentra la instantánea de la tabla usando el viaje en el tiempo

Limpiar

Complete los siguientes pasos para evitar incurrir en cargos futuros:

  1. En la consola de Amazon S3, elimine el depósito de almacenamiento de tablas (para esta publicación, iceberg-athena-lakeformation-blog).
  2. En la cuenta del productor en la consola de Athena, ejecute los siguientes comandos para eliminar las tablas que creó:
DROP TABLE "lf-demo-db"."consumer_iceberg";
DROP DATABASE lf-demo-db;

  1. En la cuenta del productor en la consola de Lake Formation, revoque los permisos de la cuenta del consumidor.
    Limpiar: revocar permisos para la cuenta del consumidor
  2. Elimine el depósito de S3 utilizado para la ubicación del resultado de la consulta de Athena de la cuenta del consumidor.

Conclusión

Con la compatibilidad con políticas de control de acceso detalladas entre cuentas para formatos como Iceberg, tiene la flexibilidad de trabajar con cualquier formato compatible con Athena. La capacidad de realizar operaciones CRUD contra los datos en su lago de datos S3 combinado con los controles de acceso detallados de Lake Formation para todas las tablas y formatos compatibles con Athena brinda oportunidades para innovar y simplificar su estrategia de datos. ¡Nos encantaría escuchar sus comentarios!


Sobre los autores

Kishore Dhamodarán es arquitecto sénior de soluciones en AWS. Kishore ayuda a los clientes estratégicos con su estrategia empresarial en la nube y su viaje de migración, aprovechando sus años de experiencia en la industria y en la nube.

Jack Ye es ingeniero de software del equipo de Athena Data Lake and Storage en AWS. Es miembro de Apache Iceberg Committer y PMC.

Chris Olson es ingeniero de desarrollo de software en AWS.

Xiaoxuan Li es ingeniero de desarrollo de software en AWS.

raul sonawane es Arquitecto Principal de Soluciones de Análisis en AWS con AI/ML y Análisis como su área de especialidad.

punto_img

Información más reciente

punto_img

Habla con nosotros!

¡Hola! ¿Le puedo ayudar en algo?