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/icebergPropiedades 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., admite las siguientes API de REST de Iceberg:us-east-1.amazonaws.com/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: Bearerde 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
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.