API REST del Catálogo Unity y API REST del Catálogo Iceberg
Metadata Service implementa API seleccionadas de las especificaciones Iceberg REST Catalog y Unity Catalog Open API. Puede aprovechar estas API desde clientes REST estándar. El uso de REST Client tiene la ventaja de interactuar directamente con el metastore sin un motor.
API REST del Catálogo Unity
Las API incluidas son las siguientes:
Catálogos
- POST /catálogos
- GET /catálogos
- GET {name}
- PATCH {name}
- DELETE {name}
Esquemas
- POST /schemas
- GET /esquemas
- GET {full_name}
- PATCH {full_name}
- DELETE {full_name}
Tablas
- POST /tablas
- GET /tablas
- GET {full_name}
- DELETE {full_name}
Ejemplo de API de Unity para catálogos GET
curl -k -X GET "https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/api/2.1/unity-catalog/catalogs" --header "Authorization: Bearer $token" --header 'Content-Type: application/json'
{
"catalogs": [
{
"name": "ad_catalog",
"comment": "",
"properties": {
"catalogType": "delta",
"storageName": "func-test-bucket"
},
"created_at": 1733724384000,
"updated_at": 0,
"id": "3186f83a-8879-46c4-b48e-125741c34e88",
"owner": "anurag",
"created_by": "anurag",
"updated_by": null
},
{
"name": "testth",
"comment": "",
"properties": {
"catalogType": "iceberg",
"storageName": "mdshms"
},
"created_at": 1733724482000,
"updated_at": 0,
"id": "9ce30ab7-1321-4189-bb10-765093d1932c",
"owner": "antony",
"created_by": "antony",
"updated_by": null
}
],
"next-page-token": null
}
Ejemplo de API de Unity para esquemas GET de catálogo
curl -k -X GET "https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/api/2.1/unity-catalog/schemas?catalog_name=mrmadira_hive_catalog" --header "Authorization: Bearer $token" --header 'Content-Type: application/json'
{
"schemas": [
{
"name": "dec92024",
"catalog_name": "mrmadira_hive_catalog",
"comment": null,
"properties": {
"locationUri": "s3a://testbucket/dec92024"
},
"full_name": "mrmadira_hive_catalog.dec92024",
"created_at": 0,
"updated_at": 0,
"schema_id": "135"
}
]
}
Comportamiento y limitaciones
Debido a la restricción de no modificar el esquema, algunos campos obligatorios deben incluirse en el campo properties
de la especificación Unity REST.
Para crear un catálogo, los campos locationUri
, nombre del cubo (registrado en watsonx.data ) y catalogType
son obligatorios y deben indicarse en el campo properties
:
"properties": {
"locationUri": "s3a://func-test-bucket/unity_schema",
"bucket": "func-test-bucket",
"catalogType": "ICEBERG"
}
Para crear esquemas, el locationUri es un campo obligatorio y debe incluirse en el campo properties
:
"properties": {
"locationUri": "s3a://func-test-bucket/unity_schema"
}
Para crear tablas, hay campos adicionales en la especificación Unity que no están disponibles. El Servicio de Metadatos ignora cualquier información que se proporcione para estos campos y no se almacena en la base de datos:
"columns": [
{
"type_json": "string",
"type_name": "string",
"type_precision": 0,
"type_scale": 0,
"type_interval_type": "string",
"position": 0,
"nullable": true,
"partition_index": 0
}
]
Si se pasan valores adicionales en las propiedades del objeto de solicitud, no se almacenan en ninguna tabla debido a la adhesión al esquema actual de HMS. En el futuro, si es necesario, puede incluir detalles adicionales en el campo properties
.
Para más información, consulte la documentación de la API.
API REST del Catálogo Iceberg
Las API incluidas son las siguientes:
Espacios de nombres
- Lista de espacios de nombres
- Crear un espacio de nombres
- Cargar propiedades de metadatos para el espacio de nombres
- Comprobar si existe el espacio de nombres
- Eliminar espacio de nombres
Tabla Iceberg relacionada
- Crear una tabla en el espacio de nombres dado
- Registrar una tabla mediante metadata_location
- Cargar una tabla
- Comprobar si existe una tabla
- Cambiar el nombre de una tabla
- Actualizar varias tablas en una transacción atómica
- Confirmar las actualizaciones de una tabla
- Descartar tabla
Vistas
- Listar todos los identificadores de vista
- Cargar una vista
- Comprobar si existe una vista
- Renombrar una vista
- Descartar vista
Config
- Punto final de configuración para configurar el catálogo como prefijo
Ejemplos de API Iceberg
Obtener los espacios de nombres de un catálogo
curl -k --request GET --url 'https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/mds/iceberg/v1/hemant_test/namespaces' --header 'Accept: application/json' --header "Authorization: Bearer $token" --header 'Content-Type: application/json' | jq
{
"namespaces": [
[
"hemant_test"
],
[
"order_schema_ad"
],
[
"schema1150850f-ece4-4c27-8794-e05b984adff5"
]
],
"next-page-token": null
}
Obtener las tablas de un esquema
curl -k --request GET --url 'https://80e7cce9-c14f-4aa8-8a3b-c52adc25efac.cdc406pd09pasng7elgg.lakehouse.dev.appdomain.cloud:32230/mds/iceberg/v1/hemant_test/namespaces/schema_cpd' --header 'Accept: application/json' --header "Authorization: Bearer $token" --header 'Content-Type: application/json' | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 74 0 74 0 0 52 0 --:--:-- 0:00:01 --:--:-- 52
{
"namespace": [
"schema_cpd"
],
"properties": {
"owner": "hemant"
}
}
Comportamiento y limitaciones
Debido a la restricción de no modificar el esquema, no se admiten las siguientes funciones:
- Creación de espacios de nombres multinivel
- Dado que Hive es el catálogo de todas las bases de datos o espacios de nombres de la tabla DBS, no se admite la creación de espacios de nombres aunque existan en catálogos distintos de Iceberg.
- Si lista el esquema, sólo se devuelven los espacios de nombres del catálogo actual con el prefijo especificado. Sin embargo, si - intenta crear un espacio de nombres que existe en otro catálogo, se devuelve una excepción
Namespace Already Exists
. - Al listar las tablas, sólo se devuelven las tablas Iceberg. Si se intenta crear una tabla con un nombre que ya existe como tabla Hive o Delta en la misma base de datos o espacio de nombres, no se permite la creación de una tabla Iceberg con el mismo nombre.
- X-Iceberg-Access-Delegation no es compatible.
- Punto final de métricas añadido sólo como ficticio.
- Presto no puede consultar las vistas creadas mediante la API de catálogo REST de Iceberg debido a la incompatibilidad de codificación. Esta misma incompatibilidad afecta a las vistas creadas desde Spark, que Presto tampoco puede consultar. Sin embargo, Spark puede consultar vistas creadas a través de la API de catálogo REST sin ningún problema.
Para más información, consulte la documentación de la API.
Limitación común: Atributos no admitidos en la creación de catálogos y tablas
Debido a la limitación del esquema actual, los siguientes atributos no se guardarán al crear catálogos y tablas:
- Para catálogos:
- comment
- Para tablas (dentro de la matriz de columnas):
- precisión_tipo
- tipo_escala
- tipo_intervalo_tipo
- position
- admite nulos
- índice_de_partición
- Para tablas (fuera de la matriz de columnas):
- comment