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

Trabajar 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, 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 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: al aplicar filtros a la vista del catálogo de datos, se asegura de 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.

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

Existen diferentes formas de crear una vista de 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 de catálogo de datos. Anote el tipo de MULTI DIALECT vista. Esto distingue la vista del catálogo de datos de otras vistas. El SECURITY predicado se especifica como. DEFINER Esto indica una vista del catálogo de datos con DEFINER semántica.

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 CREATE declaración, siguiendo 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 en seco, 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 las consultas no se realicen correctamente. Asegúrese de probar la sintaxis de SQL antes de crear la vista.

Para crear una vista, utilice el siguiente comando CLI:

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

    Muestra todas las vistas del catálogo, como las vistas normales, las vistas multidialectales (MDV) y las MDV sin el 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 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 ejecución del trabajo debe tener el SELECT permiso 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 EMR Serverless 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 la. invoker_principal Devuelve el identificador único de la función de ejecución del trabajo de EMRS. Esto se puede usar para controlar el resultado de la vista, en función del principio que lo invoca. Puede utilizarla para añadir una condición a la vista que defina los resultados de la consulta en función del rol que realiza la llamada. El rol de ejecución del trabajo debe tener permiso para la acción de LakeFormation:GetDataLakePrincipal IAM para utilizar esta función.

select invoker_principal();

Puede añadir esta función a una WHERE cláusula, por ejemplo, para refinar los resultados de la consulta.

Consideraciones y limitaciones

Al crear vistas del catálogo de datos, se aplica lo siguiente:

  • Solo puede crear vistas del catálogo de datos con Amazon EMR 7.6 y versiones posteriores.

  • 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 IAMAllowedPrincipals de lago de datos en Lake Formation. Si está presente, se produce el error «Las vistas en varios dialectos solo pueden hacer referencia a tablas sin permisos de IAMAllowed director».

  • 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 de que las vistas en varios dialectos solo pueden hacer referencia a las tablas gestionadas 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 en una cuenta o región, toda la vista debe compartirse entre cuentas y regiones, utilizando los enlaces de recursos de Lake Formation.

  • No se admiten las funciones definidas por el usuario (UDFs).

  • Puede utilizar vistas basadas en tablas Iceberg. También se admiten los formatos de tabla abierta 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 sentencia DDL para crear una vista del catálogo de datos de Glue con una columna denominadaCastle, la columna creada en el catálogo de datos de Glue aparecerá en minúsculas, a. castle Si, a continuación, especifica el nombre de la columna en una consulta de DML como Castle oCASTLE, EMR Spark pondrá el nombre en minúsculas para poder ejecutar la consulta. Sin embargo, el encabezado de la columna se muestra con mayúsculas y minúsculas que especificó en la consulta.

    Si desea que una consulta falle en el caso de que el nombre de una columna especificado en la consulta de DML no coincida con el nombre de la columna del catálogo de datos de Glue, puede spark.sql.caseSensitive=true configurarlo.