Cómo acceder al Catálogo de datos - AWS Glue

Cómo acceder al Catálogo de datos

Puede usar el AWS Glue Data Catalog (Catálogo de datos) para detectar y comprender sus datos. El Catálogo de datos proporciona una forma coherente de mantener las definiciones de los esquemas, los tipos de datos, las ubicaciones y otros metadatos. Puede acceder al Catálogo de datos mediante los siguientes métodos:

  • Consola de AWS Glue: Puede acceder al Catálogo de datos y administrarlo por medio de la consola de AWS Glue, una interfaz de usuario en línea. La consola le permite explorar y buscar bases de datos, tablas y sus metadatos asociados, así como crear, actualizar y eliminar definiciones de metadatos.

  • Rastreador de AWS Glue: Los rastreadores son programas que escanean automáticamente los orígenes de datos y completan el Catálogo de datos con metadatos. Puede crear y ejecutar rastreadores para detectar y catalogar datos de diversas fuentes, como Amazon S3, Amazon RDS, Amazon DynamoDB, Amazon CloudWatch y bases de datos relacionales que cumplen los requisitos de JDBC, como MySQL y PostgreSQL, así como de varias fuentes ajenas a AWS, como Snowflake y Google BigQuery.

  • API de AWS Glue: Puede acceder al Catálogo de datos por medio de programación mediante las API de AWS Glue. Estas API le permiten interactuar con el Catálogo de datos por medio de programación, lo que permite la automatización y la integración con otras aplicaciones y servicios.

  • AWS Command Line Interface (AWS CLI): Puede usar la AWS CLI para acceder al Catálogo de datos y administrarlo desde la línea de comandos. La CLI proporciona comandos para crear, actualizar y eliminar definiciones de metadatos, así como para consultar y recuperar información de metadatos.

  • Integración con otros servicios de AWS: El Catálogo de datos se integra con otros servicios de AWS, lo que le permite acceder a los metadatos almacenados en el Catálogo y usarlos. Por ejemplo, puede usar Amazon Athena para consultar orígenes de datos mediante los metadatos del Catálogo de datos y usar AWS Lake Formation para administrar el acceso a los datos y la gobernanza de los recursos del Catálogo.

Conexión al catálogo de datos mediante el punto de conexión de REST de AWS Glue Iceberg

El punto de conexión de REST de Iceberg de AWS Glue admite las operaciones de API indicadas en la especificación REST de Apache Iceberg. Si usa un cliente REST de Iceberg, puede conectar la aplicación que se ejecuta en un motor de análisis al catálogo de REST hospedado en el catálogo de datos.

El punto de conexión es compatible con las dos especificaciones de la tabla de Apache Iceberg, v1 y v2; de forma predeterminada, se usará v2. Si utiliza la especificación v1 de la tabla de Iceberg, debe especificar v1 en la llamada a la API. Mediante la operación de API, puede acceder a las tablas de Iceberg que se guardan tanto en el almacenamiento de objetos de Amazon S3 como en el almacenamiento de tablas de Amazon S3.

Detalles de configuración

Endpoint : https://glue.us-east-1.amazonaws.com/iceberg

Al utilizar el cliente de Iceberg para conectar un motor de análisis como Spark al punto de conexión del servicio, debe especificar las siguientes configuraciones de la aplicación:

catalog_name = "mydatacatalog"
aws_account_id = "123456789012"
aws_region = "us-east-1"
spark = SparkSession.builder \
    ... \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.type", "rest") \
    .config(f"spark.sql.catalog.{catalog_name}.uri", "https://glue.{aws_region}.amazonaws.com/iceberg") \
    .config(f"spark.sql.catalog.{catalog_name}.warehouse", "{aws_account_id}") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.sigv4-enabled", "true") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.signing-name", "glue") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.signing-region", "{aws_region}") \
    .config(f"spark.sql.catalog.{catalog_name}.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
     

Conexión al catálogo de datos mediante el punto de conexión de la extensión de REST de AWS Glue Iceberg

El punto de conexión de la extensión de REST de AWS Glue Iceberg proporciona API adicionales, que no están presentes en la especificación REST de Apache Iceberg; además, otorga funciones de planificación de escaneo del servidor. Estas API adicionales se utilizan al acceder a las tablas que se guardan en el almacenamiento gestionado de Amazon Redshift. Puede acceder al punto de conexión desde una aplicación que utilice la biblioteca de extensiones de AWS Glue Data Catalog de Apache Iceberg.

Endpoint : https://glue.us-east-1.amazonaws.com/extensions
catalog_name = "myredshiftcatalog"
aws_account_id = "123456789012"
aws_region = "us-east-1"
spark = SparkSession.builder \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \
    .config(f"spark.sql.catalog.{catalog_name}.client.region", "{aws_region}") \
    .config(f"spark.sql.catalog.{catalog_name}.glue.id", "{aws_account_id}:redshiftnamespacecatalog/redshiftdb") \
    .config(f"spark.sql.catalog.{catalog_name}.glue.endpoint", "https://glue.us-east-1.amazonaws.com/extensions") \
    .config(f"spark.sql.catalog.{catalog_name}.glue.extensions.debug-enabled", "true") \
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
    

Autenticación y autorización del acceso a los puntos de conexión del servicio AWS Glue

Las solicitudes de API a los puntos de conexión de AWS Glue Data Catalog se autentican mediante AWS Signature Version 4 (SigV4). Consulte la sección de solicitudes de API de la versión de firma 4 de AWS para obtener más información sobre SigV4 de AWS.

Al acceder al punto de conexión del servicio AWS Glue y a los metadatos de AWS Glue, la aplicación asume un rol de IAM que requiere una acción de IAM glue:getCatalog.

Operación REST Ruta REST Acción de IAM AWS Glue Nombre de eventos de CloudTrail Permisos de Lake Formation
GetConfig GET /config GetCatalog No obligatorio
ListNamespaces GET /namespaces GetDatabases GetDatabases ALL, DESCRIBE, SELECT
CreateNamespace POST /namespaces CreateDatabase CreateDatabase ALL, CREATE_DATABASE
LoadNamespaceMetadata GET /namespaces/{ns} GetDatabase GetDatabase ALL, DESCRIBE, SELECT
UpdateProperties POST /namespaces/{ns}/properties UpdateDatabase UpdateDatabase ALL, ALTER
DeleteNamespace DELETE /namespace/{ns} DeleteDatabase DeleteDatabase ALL, DROP
ListTables GET /namespaces/{ns}/tables GetTables GetTables ALL, SELECT, DESCRIBE
CreateTable POST /namespaces/{ns}/tables CreateTable CreateTable ALL, CREATE_TABLE
LoadTable GET /namespaces/{ns}/tables/{tbl} GetTable GetTable ALL, SELECT, DESCRIBE
TableExists HEAD /namespaces/{ns}/tables/{tbl} GetTable GetTable ALL, SELECT, DESCRIBE
UpdateTable POST /namespaces/{ns}/tables/{tbl} UpdateTable UpdateTable ALL, ALTER
DeleteTable DELETE /namespaces/{ns}/tables/{tbl} DeleteTable DeleteTable ALL, DROP

Puede usar IAM, AWS Lake Formation o los permisos de modo híbrido de Lake Formation para administrar el acceso al catálogo de datos predeterminado y sus objetos.

Los catálogos federados en AWS Glue Data Catalog tienen ubicaciones de datos registradas en Lake Formation. Lake Formation se integra con el catálogo de datos y proporciona permisos similares a los de una base de datos para administrar el acceso de los usuarios a los objetos del catálogo. En Lake Formation, es necesario configurar los permisos para el usuario o rol de IAM que se utiliza para crear, insertar o eliminar datos. Los permisos son los mismos que los de las tablas AWS Glue existentes:

  • CREATE_CATALOG: es necesario para crear catálogos

  • CREATE_DATABASE: es necesario para crear bases de datos

  • CREATE_TABLE: es necesario para crear tablas

  • DELETE: es necesario para eliminar datos de una tabla

  • DESCRIBE: es necesario para leer los metadatos

  • DROP: es necesario para eliminar una tabla o base de datos

  • INSERT: es necesario cuando la entidad principal debe insertar datos en una tabla

  • SELECT: es necesario cuando la entidad principal necesita seleccionar datos de una tabla

Para obtener más información, consulte Lake Formation permissions reference en la Guía para desarrolladores de AWS Lake Formation.

Conexión al catálogo de datos desde una aplicación Spark independiente

Puede conectarse al catálogo de datos desde una aplicación independiente mediante un conector de Apache Iceberg.

  1. Cree un rol de IAM para la aplicación Spark.

  2. Conéctese al punto de conexión de REST de Iceberg de AWS Glue mediante el conector de Iceberg.

    # configure your application. Refer to https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html for best practices on configuring environment variables. export AWS_ACCESS_KEY_ID=$(aws configure get appUser.aws_access_key_id) export AWS_SECRET_ACCESS_KEY=$(aws configure get appUser.aws_secret_access_key) export AWS_SESSION_TOKEN=$(aws configure get appUser.aws_secret_token) export AWS_REGION=us-east-1 export REGION=us-east-1 export AWS_ACCOUNT_ID = {specify your aws account id here} ~/spark-3.5.3-bin-hadoop3/bin/spark-shell \ --packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \ --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --conf "spark.sql.defaultCatalog=spark_catalog" \ --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \ --conf "spark.sql.catalog.spark_catalog.type=rest" \ --conf "spark.sql.catalog.spark_catalog.uri=https://glue.us-east-1.amazonaws.com/iceberg" \ --conf "spark.sql.catalog.spark_catalog.warehouse = {AWS_ACCOUNT_ID}" \ --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-name=glue" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-region=us-east-1" \ --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \ --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider"
  3. Consulte los datos en el catálogo de datos.

    spark.sql("create database myicebergdb").show()
    spark.sql("""CREATE TABLE myicebergdb.mytbl (name string) USING iceberg location 's3://bucket_name/mytbl'""")
    spark.sql("insert into myicebergdb.mytbl values('demo') ").show()
           

Asignación de datos entre Amazon Redshift y Apache Iceberg

Redshift e Iceberg admiten varios tipos de datos. La siguiente matriz de compatibilidad describe la compatibilidad y las limitaciones cuando tenga que asignar datos entre estos dos sistemas de datos. Consulte Tipos de datos de Amazon Redshift y Especificaciones de la tabla de Apache Iceberg para obtener más información sobre los tipos de datos compatibles en sus respectivos sistemas de datos.

Tipo de datos de Redshift Alias Tipo de datos de Iceberg
SMALLINT INT2 int
INTEGER INT, INT4 int
BIGINT INT8 long
DECIMAL NUMERIC decimal
REAL FLOAT4 float
REAL FLOAT4 float
DOUBLE PRECISION FLOAT8, FLOAT double
CHAR CHARACTER, NCHAR cadena
VARCHAR CHARACTER VARYING, NVARCHAR cadena
BPCHAR cadena
TEXT cadena
FECHA date
HORA TIME WITHOUT TIMEZONE hora
HORA TIME WITH TIMEZONE no admitido
MARCA DE TIEMPO TIMESTAMP WITHOUT TIMEZONE MARCA DE TIEMPO
TIMESTAMPZ TIMESTAMP WITH TIMEZONE TIMESTAMPZ
INTERVALO AÑO A MES No compatible
INTERVALO DÍA A SEGUNDO No compatible
BOOLEAN BOOL bool
HLLSKETCH No compatible
SUPER No compatible
VARBYTE VARBINARY, BINARY VARYING binario
GEOMETRY No compatible
GEOGRAPHY No compatible

Consideraciones y limitaciones al utilizar las API del catálogo REST de Iceberg AWS Glue

A continuación, puede ver las consideraciones y limitaciones que surgen al utilizar el comportamiento de la operación de lenguaje de definición de datos (DDL) del catálogo de REST de Apache Iceberg.

Consideraciones
  • Comportamiento de la API DeleteTable: la API DeleteTable admite una opción de purga. Si la purga está establecida en true, los datos de la tabla se eliminan; de lo contrario, no se eliminarán. En el caso de las tablas de Amazon S3, la operación no eliminará los datos de las tablas. La operación devuelve un error cuando la tabla está almacenada en Amazon S3 y purge = TRUE,.

    En el caso de las tablas que se guardan en el almacenamiento gestionado de Amazon Redshift, la operación eliminará los datos de la tabla, de forma similar al comportamiento DROP TABLE de Amazon Redshift. La operación devuelve un error cuando la tabla está almacenada en Amazon Redshift y purge = FALSE.

  • Comportamiento de la API CreateTable: la operación de la API CreateTable no admite la opción state-create = TRUE.

  • Comportamiento de la APIRenameTable: la operación RenameTable se admite en las tablas de Amazon Redshift, pero no en Amazon S3.

  • Operaciones de DDL para espacios de nombres y tablas en Amazon Redshift: las operaciones de creación, actualización y eliminación de espacios de nombres y tablas en Amazon Redshift son operaciones asíncronas porque dependen del momento en que está disponible el grupo de trabajo que administra Amazon Redshift y de si se va a realizar una transacción de DDL y DML conflictiva y la operación tiene que esperar a que se bloquee para confirmar los cambios.

    Durante una operación de creación, actualización o eliminación, el punto de conexión devuelve una respuesta de tipo 202 con la siguiente carga útil.

    {
      "transaction-context": "operation/resource", 
      "transaction-id": "data-api-request-id:crypto-hash-signature(operation, resource, data-api-uuid)"
    }        

    Por ejemplo, el punto de conexión proporcionará la siguiente respuesta para una operación UpdateTable:

    {
      "transaction-context": "UpdateTable/arn:aws:glue:us-east-1:123456789012:table/123456789012/cat1/db1/tbl1", 
      "transaction-id": "b0033764-20df-4679-905d-71f20a0cdbe7:ca8a95d54158793204f1f39b4971d2a7"
    }        

    Para realizar un seguimiento del progreso de esta transacción, puede usar la API CheckTransactionStatus, que tiene el siguiente aspecto:

    POST /transactions/status
    
    Request:
    {
      "transaction-context": "UpdateTable/arn:aws:glue:us-east-1:123456789012:table/123456789012/cat1/db1/tbl1", 
      "transaction-id": "transaction-id": "b0033764-20df-4679-905d-71f20a0cdbe7:ca8a95d54158793204f1f39b4971d2a7"
    }
    
    Response:
    {
       "status": "IN_PRORESS|SUCCEEDED|FAILED|CANCELED",
      "error": "message" // if failed
    }
            
Limitaciones
  • Las API de visualización de la especificación de REST de Apache Iceberg no son compatibles con el catálogo de REST de AWS Glue Iceberg.