View a markdown version of this page

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

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

AWS GlueEl punto de conexión de REST de Iceberg de admite las operaciones de API indicadas en la especificación REST de Apache Iceberg. Si usa un cliente de 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.

Configuración de puntos de conexión

Puede acceder al catálogo de REST de AWS Glue Iceberg con el punto de conexión del servicio. Consulte la guía de referencia de puntos de conexión de servicio de AWS Glue para el punto de conexión específico de la región. Por ejemplo, si conecta AWS Glue a la región us-east-1, debe configurar la propiedad URI del punto de conexión como se indica a continuación:

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

Propiedades de configuración adicionales: cuando se utiliza el cliente Iceberg para conectar un motor de análisis como Spark al punto de conexión del servicio, es necesario especificar las siguientes propiedades de configuración 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("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
     

El punto de conexión de Iceberg de AWS Glue, https://glue.us-east-1.amazonaws.com/iceberg, admite las siguientes API de REST de Iceberg:

  • GetConfig

  • ListNamespaces

  • CreateNamespace

  • LoadNamespaceMetadata

  • UpdateNamespaceProperties

  • DeleteNamespace

  • ListTables

  • CreateTable

  • LoadTable

  • TableExists

  • UpdateTable

  • DeleteTable

Autenticación

El punto de conexión REST de Iceberg de AWS Glue admite dos métodos de autenticación. Elija el método que corresponda a la forma en que su motor de análisis o integración se conecta al catálogo.

  • AWSSignature Version 4 (SigV4): método predeterminado para los SDK de AWS y los motores de análisis nativos de AWS que se autentican con credenciales de AWS.

  • Token portador de OAuth 2.0: para socios de integración externos y motores de consultas de terceros que utilizan el modelo de autenticación OAuth definido en la especificación del catálogo REST de Apache Iceberg. El cliente presenta un token de acceso OAuth en el encabezado Authorization: Bearer de cada solicitud.

Autenticación mediante tokens portadores de OAuth 2.0

Los clientes externos obtienen un token de acceso OAuth de corta duración de AWS Sign-In y lo presentan al punto de conexión REST de Iceberg de AWS Glue. AWS Glue valida el token y aplica los permisos de AWS Lake Formation en cada solicitud. Para la operación LoadTable, las credenciales de Amazon S3 que proporciona AWS Glue están limitadas por el rol de IAM asumido y los permisos de Lake Formation concedidos a dicho rol.

Esta integración utiliza la concesión de intercambio de tokens de OAuth 2.0 (RFC 8693). Un socio de integración presenta el token web JSON (JWT) de un usuario final a AWS Sign-In y lo intercambia por un token de acceso OAuth de corta duración cuyo ámbito se limita al servicio de AWS Glue. A continuación, el socio presenta ese token al punto de conexión REST de Iceberg de AWS Glue para leer sus tablas.

Para obtener información completa sobre la configuración y el intercambio de tokens, consulte Configure OAuth access to AWS Glue Iceberg REST Catalog en la AWS Sign-In User Guide.

Parámetros de prefijo y ruta de catálogo

Las API del catálogo de REST de Iceberg tienen un prefijo de formato libre en las URL de solicitud. Por ejemplo, la llamada a la API ListNamespaces usa el formato URLGET/v1/{prefix}/namespaces. El prefijo AWS Gluesiempre sigue la estructura /catalogs/{catalog} para garantizar que la ruta de REST alinee la jerarquía de varios catálogos de AWS Glue. El parámetro {catalog} de ruta se puede derivar en función de las siguientes reglas:

Patrón de acceso

Estilo de ID de catálogo de Glue

Estilo de prefijo

Ejemplo de ID de catálogo predeterminado

Ejemplo de ruta de REST

Acceda al catálogo predeterminado en la cuenta actual

No obligatorio :

no se usa

GET /v1/catalogs/:/namespaces

Acceso al catálogo predeterminado en una cuenta específica

accountID accountID 111122223333 GET /v1/catalogs/111122223333/namespaces

Acceda al catálogo anidado en la cuenta actual

catalog1/catalog2

catalog1/catalog2

rmscatalog1:db1

GET /v1/catalogs/rmscatalog1:db1/namespaces

Acceso a un catálogo anidado en una cuenta específica

accountId:catalog1/catalog2

accountId:catalog1/catalog2

123456789012/rmscatalog1:db1

GET /v1/catalogs/123456789012:rmscatalog1:db1/namespaces

Esta asignación de identificador de catálogo a prefijo solo es necesaria cuando se llama directamente a las API de REST. Si trabaja con las API del catálogo REST de Iceberg de AWS Glue a través de un motor, debe especificar el ID del catálogo de AWS Glue en el parámetro warehouse de la configuración de la API del catálogo REST de Iceberg o en el parámetro glue.id de la configuración de la API de extensiones de AWS Glue. Por ejemplo, vea cómo puede usarlo con EMR Spark en Use an Iceberg clúster with Spark.

Parámetro de ruta de espacio de nombres

La ruta de API del catálogo de REST de Iceberg para espacios de nombres puede tener varios niveles. Sin embargo, AWS Glue solo admite espacios de nombres de un solo nivel. Para acceder a un espacio de nombres en una jerarquía de catálogos de varios niveles, puede conectarse a un catálogo de varios niveles situado encima del espacio de nombres para hacer referencia al espacio de nombres. Esto permite a cualquier motor de consultas que admita la notación de tres partes de catalog.namespace.table acceder a los objetos en la jerarquía del catálogo de varios niveles de AWS Glue sin problemas de compatibilidad, en comparación con el uso del espacio de nombres de varios niveles.