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.
Cree un rol de IAM para la aplicación Spark.
-
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"
-
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
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 ypurge = 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 ypurge = FALSE
. -
Comportamiento de la API CreateTable: la operación de la API
CreateTable
no admite la opciónstate-create = TRUE
. -
Comportamiento de la API
RenameTable
: la operaciónRenameTable
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.