View a markdown version of this page

Trabajo con vistas del Catálogo de datos de Glue - 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.

Trabajo con vistas del Catálogo de datos de Glue

Puede crear y administrar vistas en el catálogo de datos de AWS Glue para usarlas con EMR Serverless. 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 Serverless y Amazon Amazon Athena Redshift.

Al crear una vista en el catálogo de datos, utilice 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 necesitas 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 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: comparte datos con otras AWS cuentas sin moverlos. Para obtener más información, consulte Cross-account data sharing in Lake Formation.

Creación de una vista del catálogo de datos

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

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 las vistas del catálogo de datos de Building AWS Glue en la Guía para AWS Lake Formation desarrolladores.

Consulta de la vista del Catálogo de datos

Tras crear una vista del catálogo de datos, puede consultarla mediante un trabajo de Amazon EMR Serverless Spark que tenga activado el control de acceso AWS Lake Formation 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 EMR sin servidor en EMR Studio, ejecute 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

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.6 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 de los directores. 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 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 de 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 oCASTLE, 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, configure spark.sql.caseSensitive=true.