Introduction
The Iceberg REST Catalog is a metadata management solution for Apache Iceberg, a high-performance table format for managing large-scale datasets. The REST Catalog provides a unified, API-driven approach to interact with Iceberg metadata, enabling dynamic and scalable metadata management across distributed environments.
The api are in beta state and expected to change.
Authentication
Required Purpose: To work with the API, you must use an IBM Cloud Pak for Data API key (platform API key or instance API key), or IBM Cloud Pak for Data authorization token (platform token or instance token). The API key or token is used to determine the actions that a user or service ID has access to when they use the API.
You can generate an API key or authorization token for an authenticated user by using the Cloud Pak for Data APIs. For more information, see Generating an authorization token or API key.
To use the API, add a valid API key or token to the HTTP Authorization request header. For token, -H 'Authorization: Bearer {TOKEN}'
.
For API key, you need to firstly encode username together with API key: echo "<username>:<api_key>" | base64
.
Then, you can use the ZenApiKey header to authenticate to an endpoint: -H "Authorization: ZenApiKey <encoded value>"
.
To retrieve your access token:
For most Cloud Pak for Data endpoints, you can use the generated API key in the authorization header of subsequent API calls.
curl -H "Authorization: ZenApiKey <token>" "https://<cpd_instance_route>/<endpoint>"
If the ZenApiKey token is not supported, use a generated Bearer token in the authorization header of subsequent API calls.
curl -H "Authorization: Bearer <token>" "https://<cpd_instance_route>/<endpoint>"
Error handling
This API uses standard HTTP response codes to indicate whether a method completed successfully. A 200
response indicates success. A 400
type response indicates a failure, and a 500
type response indicates an internal system error.
HTTP Error Code | Description | Recovery |
---|---|---|
200 |
Success | The request was successful. |
204 |
No Content | The server successfully processed the request and is not returning any content. |
400 |
Bad Request | The input parameters in the request body are either incomplete or in the wrong format. Be sure to include all required parameters in your request. |
401 |
Unauthorized | You are not authorized to make this request. Log in to IBM Cloud and try again. If this error persists, contact the account owner to check your permissions. |
403 |
Forbidden | The supplied authentication is not authorized to access '{namespace}'. |
404 |
Not Found | The requested resource could not be found. |
409 |
Conflict | The entity is already in the requested state. |
500 |
Internal Server Error | Your request could not be processed. Wait a few minutes and try again. |
Methods
List all catalog configuration settings
All REST clients should first call this route to get catalog configuration properties from the server to configure the catalog and its HTTP client. Configuration from the server consists of two sets of key/value pairs.
- defaults - properties that should be used as default configuration; applied before client configuration
- overrides - properties that should be used to override client configuration; applied after defaults and client configuration
Catalog configuration is constructed by setting the defaults, then client- provided configuration, and finally overrides. The final property set is then used to configure the catalog.
GET /v1/config
Request
Query Parameters
Warehouse should be passsed as wxd iceberg catalog_name from spark/presto engine to configure default wxd iceberg catalog
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
curl -X GET -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/config?warehouse={catalog_name}"
Response
Server-provided configuration for the catalog.
Properties that should be used to override client configuration; applied after defaults and client configuration.
- overrides
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9]*://[A-Za-z0-9-]{3,63}(?:.[A-Za-z0-9-]{3,63})*(/[A-Za-z0-9-_/]+)*$
Properties that should be used as default configuration; applied before client configuration.
- defaults
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
Server specified configuration values.
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "overrides": { "warehouse": "s3://bucket/warehouse/" } }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Query Parameters
A token used to retrieve the next page of results in a paginated response
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
, allows empty valueFor servers that support pagination, this signals an upper bound of the number of results that a client will receive. For servers that do not support pagination, clients may receive results larger than the indicated
pageSize
.Possible values: 0 ≤ value ≤ 1000000000000000
curl -X GET -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/{catalog_name}/namespaces"
Response
Return a next-page-token in the response if there are more results available. Otherwise returns null
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
List of namespace
Possible values: 0 ≤ number of items ≤ 250, contains only unique items
Status Code
A list of namespaces
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - Namespace provided in the
parent
query parameter is not found.Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "namespaces": [ [ "namespace1" ], [ "namespace2" ] ] }
{ "namespaces": [] }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Create a namespace
Create a namespace, with an optional set of properties. The server might also add properties, such as last_modified_time
etc.
POST /v1/{prefix}/namespaces
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Request to create Namespace
Reference to one level of a namespace only
Possible values: 0 ≤ number of items ≤ 250, 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Examples:[ "string" ]
Configured string to string map of properties for the namespace, storage_location will be treated as namespace location, if not given then default location will be used as s3a://
/namespace_name Default:
{}
Examples:{ "owner": "Hank Bendickson", "storage_location": "s3a://<bucket-name>/accounting" }
- properties
Additional properties
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"namespace":["namespace_name"],"properties":{"owner":"string","storage_location":"s3a://bucket_name/namespace_name"}}' "https://{region}/mds/iceberg/v1/catalog_name/namespaces"
Response
Reference to one level of a namespace only
Possible values: 0 ≤ number of items ≤ 250, 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Examples:[ "string" ]
Properties stored on the namespace, if supported by the server.
Examples:{ "owner": "Ralph", "created_at": "1452120468" }
- properties
Additional Properties
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Status Code
Represents a successful call to create a namespace. Returns the namespace created, as well as any properties that were stored for the namespace, including those the server might have added. Implementations are not required to support namespace properties.
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Acceptable / Unsupported Operation. The server does not support this operation.
Conflict - The namespace already exists
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "namespace": [ "namespace_name" ], "properties": { "owner": "string", "created_at": "0" } }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The server does not support this operation", "type": "UnsupportedOperationException", "code": 406 } }
{ "error": { "message": "The given namespace already exists", "type": "AlreadyExistsException", "code": 409 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Load the metadata properties for a namespace
Return all stored metadata properties for a given namespace
GET /v1/{prefix}/namespaces/{namespace}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
curl -X GET -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/{catalog_name}/namespaces/{namespace_name}'"
Response
Reference to one level of a namespace only
Possible values: 0 ≤ number of items ≤ 250, 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Examples:[ "string" ]
Properties stored on the namespace, if supported by the server. If the server does not support namespace properties, it should return null for this field. If namespace properties are supported, but none are set, it should return an empty object.
Examples:{ "owner": "string", "transient_lastDdlTime": "0" }
- properties
additionalProperties
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Status Code
Returns a namespace, as well as any properties stored on the namespace if namespace properties are supported by the server.
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - Namespace not found
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Check if a namespace exists
Check if a namespace exists. The response does not contain a body.
HEAD /v1/{prefix}/namespaces/{namespace}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
curl -X HEAD -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/{catalog_name}/namespaces/{namespace_name}'"
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - Namespace not found
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
Drop a namsespace from the catalog
Drop a namespace from the catalog. Namespace must be empty.
DELETE /v1/{prefix}/namespaces/{namespace}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
curl -X DELETE -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/{catalog_name}/namespaces/{namespace_name}'"
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - Namespace to delete does not exist.
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Set or remove properties on a namespace
Set and/or remove properties on a namespace. The request body specifies a list of properties to remove and a map of key value pairs to update. Properties that are not in the request are not modified or removed by this call. Server implementations are not required to support namespace properties.
POST /v1/{prefix}/namespaces/{namespace}/properties
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
An update namespace properties request with both properties to remove and properties to upsert.
{
"removals": [
"foo",
"bar"
],
"updates": {
"owner": "Raoul"
}
}
list of properties to remove
Possible values: 0 ≤ number of items ≤ 250, contains only unique items, 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -_]*$
Examples:[ "department", "access_group" ]
map of key value pairs to update
Examples:{ "owner": "Hank Bendickson" }
- updates
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"removals":["foo","bar"],"updates":{"owner":"Raoul"}}' "https://{region}/mds/iceberg/v1/{catalog_name}/namespaces/{namespace_name}/properties'"
Response
Response for namespace updates request
List of property keys that were added or updated
Possible values: 0 ≤ number of items ≤ 250, contains only unique items, 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
List of properties that were removed
Possible values: 0 ≤ number of items ≤ 250, 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
List of properties requested for removal that were not found in the namespace's properties. Represents a partial success response. Server's do not need to implement this.
Possible values: 0 ≤ number of items ≤ 250, 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
JSON data response for a synchronous update properties request.
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - Namespace not found
Not Acceptable / Unsupported Operation. The server does not support this operation.
Credentials have timed out. If possible, the client should refresh credentials and retry.
Unprocessable Entity - A property key was included in both
removals
andupdates
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "updated": [ "owner" ], "removed": [ "foo" ], "missing": [ "bar" ] }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "The server does not support this operation", "type": "UnsupportedOperationException", "code": 406 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "The request cannot be processed as there is a key present multiple times", "type": "UnprocessableEntityException", "code": 422 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
List all table identifiers underneath a given namespace
Return all table identifiers under this namespace
GET /v1/{prefix}/namespaces/{namespace}/tables
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
Query Parameters
A token used to retrieve the next page of results in a paginated response
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
, allows empty valueFor servers that support pagination, this signals an upper bound of the number of results that a client will receive. For servers that do not support pagination, clients may receive results larger than the indicated
pageSize
.Possible values: 0 ≤ value ≤ 1000000000000000
curl -X GET -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/{catalog_name}/namespaces/{namespace_name}/tables"
Response
Return a next-page-token in the response if there are more results available. Otherwise returns null
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Identifiers
Possible values: 0 ≤ number of items ≤ 250, contains only unique items
Status Code
A list of table identifiers
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - The namespace specified does not exist
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "identifiers": [ { "namespace": [ "namespace_name" ], "name": "table_name" }, { "namespace": [ "namespace_name" ], "name": "table_name" } ] }
{ "identifiers": [] }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Create a table in the given namespace
Create a table or start a create transaction, like atomic CTAS.
If stage-create
is false, the table is created immediately.
If stage-create
is true, the table is not created, but table metadata is initialized and returned. The service should prepare as needed for a commit to the table commit endpoint to complete the create transaction. The client uses the returned metadata to begin a transaction. To commit the transaction, the client sends all create and subsequent changes to the table commit route. Changes from the table create operation include changes like AddSchemaUpdate and SetCurrentSchemaUpdate that set the initial table state.
POST /v1/{prefix}/namespaces/{namespace}/tables
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
Request for create Table
name of the table
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Schema
Table location
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
PartitionSpec
SortOrder
stage_create
Properties of table
- properties
Additional Properties
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"name":"string","location":"string","schema":{"type":"struct","fields":[{"id":0,"name":"string","type":["long","string","fixed[16]","decimal(10,2)"],"required":true,"doc":"string"}],"identifier-field-ids":[0]},"partition-spec":{"fields":[{"field-id":0,"source-id":0,"name":"string","transform":["identity","year","month","day","hour","bucket[256]","truncate[16]"]}]},"write-order":{"fields":[{"source-id":0,"transform":["identity","year","month","day","hour","bucket[256]","truncate[16]"],"direction":"asc","null-order":"nulls-first"}]},"stage-create":true,"properties":{"additionalProp1":"string","additionalProp2":"string","additionalProp3":"string"}}' "https://{region}/mds/iceberg/v1/{catalog_name}/namespaces/{namespace_name}/tables"
Response
Result used when a table is successfully loaded.
The table metadata JSON is returned in the metadata
field. The corresponding file location of table metadata should be returned in the metadata-location
field, unless the metadata is not yet committed. For example, a create transaction may return metadata that is staged but not committed.
Clients can check whether metadata has changed by comparing metadata locations after the table has been created.
The config
map returns table-specific configuration for the table's resources, including its HTTP client and FileIO. For example, config may contain a specific FileIO implementation class for the table depending on its underlying storage.
The following configurations should be respected by clients:
General Configurations
token
: Authorization bearer token to use for table requests if OAuth2 security is enabled
AWS Configurations
The following configurations should be respected when working with tables stored in AWS S3
client.region
: region to configure client for making requests to AWSs3.access-key-id
: id for for credentials that provide access to the data in S3s3.secret-access-key
: secret for credentials that provide access to data in S3s3.session-token
: if present, this value should be used for as the session tokens3.remote-signing-enabled
: iftrue
remote signing should be performed as described in thes3-signer-open-api.yaml
specification
TableMetadata
May be null if the table is staged as part of a transaction
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
map returns table-specific configuration for the table's resources, including its HTTP client and FileIO.
- config
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
Table metadata result after creating a table
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - The namespace specified does not exist
Conflict - The table already exists
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "The given table already exists", "type": "AlreadyExistsException", "code": 409 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Register a table in the given namespace using given metadata file location
Register a table using given metadata file location.
POST /v1/{prefix}/namespaces/{namespace}/register
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
Request to Register Table
Properties
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Metedata Location
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"name":"string","metadataLocation":"string"}' "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/register"
Response
Result used when a table is successfully loaded.
The table metadata JSON is returned in the metadata
field. The corresponding file location of table metadata should be returned in the metadata-location
field, unless the metadata is not yet committed. For example, a create transaction may return metadata that is staged but not committed.
Clients can check whether metadata has changed by comparing metadata locations after the table has been created.
The config
map returns table-specific configuration for the table's resources, including its HTTP client and FileIO. For example, config may contain a specific FileIO implementation class for the table depending on its underlying storage.
The following configurations should be respected by clients:
General Configurations
token
: Authorization bearer token to use for table requests if OAuth2 security is enabled
AWS Configurations
The following configurations should be respected when working with tables stored in AWS S3
client.region
: region to configure client for making requests to AWSs3.access-key-id
: id for for credentials that provide access to the data in S3s3.secret-access-key
: secret for credentials that provide access to data in S3s3.session-token
: if present, this value should be used for as the session tokens3.remote-signing-enabled
: iftrue
remote signing should be performed as described in thes3-signer-open-api.yaml
specification
TableMetadata
May be null if the table is staged as part of a transaction
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
map returns table-specific configuration for the table's resources, including its HTTP client and FileIO.
- config
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
Table metadata result when loading a table
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - The namespace specified does not exist
Conflict - The table already exists
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "The given table already exists", "type": "AlreadyExistsException", "code": 409 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Load a table from the catalog
Load a table from the catalog.
The response contains table metadata.
The response also contains the table's full metadata, matching the table metadata JSON file.
GET /v1/{prefix}/namespaces/{namespace}/tables/{table}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A table name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
sales
curl -X GET -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/tables/table_name"
Response
Result used when a table is successfully loaded.
The table metadata JSON is returned in the metadata
field. The corresponding file location of table metadata should be returned in the metadata-location
field, unless the metadata is not yet committed. For example, a create transaction may return metadata that is staged but not committed.
Clients can check whether metadata has changed by comparing metadata locations after the table has been created.
The config
map returns table-specific configuration for the table's resources, including its HTTP client and FileIO. For example, config may contain a specific FileIO implementation class for the table depending on its underlying storage.
The following configurations should be respected by clients:
General Configurations
token
: Authorization bearer token to use for table requests if OAuth2 security is enabled
AWS Configurations
The following configurations should be respected when working with tables stored in AWS S3
client.region
: region to configure client for making requests to AWSs3.access-key-id
: id for for credentials that provide access to the data in S3s3.secret-access-key
: secret for credentials that provide access to data in S3s3.session-token
: if present, this value should be used for as the session tokens3.remote-signing-enabled
: iftrue
remote signing should be performed as described in thes3-signer-open-api.yaml
specification
TableMetadata
May be null if the table is staged as part of a transaction
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
map returns table-specific configuration for the table's resources, including its HTTP client and FileIO.
- config
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
Table metadata result when loading a table
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchTableException, table to load does not exist
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given table does not exist", "type": "NoSuchTableException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Commit updates to a table
Commit updates to a table.
Commits have two parts, requirements and updates. Requirements are assertions that will be validated before attempting to make and commit changes. For example, assert-ref-snapshot-id
will check that a named ref's snapshot ID has a certain value.
Updates are changes to make to table metadata. For example, after asserting that the current main ref is at the expected snapshot, a commit may add a new child snapshot and set the ref to the new snapshot id.
Create table transactions that are started by createTable with stage-create
set to true are committed using this route. Transactions should include all changes to the table, including table initialization, like AddSchemaUpdate and SetCurrentSchemaUpdate. The assert-create
requirement is used to ensure that the table was not created concurrently.
POST /v1/{prefix}/namespaces/{namespace}/tables/{table}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A table name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
sales
Commit updates to a table
assertions that will be validated before attempting to make and commit changes
Possible values: 0 ≤ number of items ≤ 250
- requirements
changes to make to table metadata
Possible values: 0 ≤ number of items ≤ 250
- updates
Table identifier to update; must be present for CommitTransactionRequest
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"namespace":["accounting"],"properties":{"owner":"Hank Bendickson","storage_location":"s3a://bucket_name/accounting"}}' "https://{region}/mds/iceberg/v1/catalog_name/namespaces"
Response
CommitTableResponse
metadata-location
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
TableMetadata
Status Code
Response used when a table is successfully updated. The table metadata JSON is returned in the metadata field. The corresponding file location of table metadata must be returned in the metadata-location field. Clients can check whether metadata has changed by comparing metadata locations.
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchTableException, table to load does not exist
Conflict - CommitFailedException, one or more requirements failed. The client may retry.
Credentials have timed out. If possible, the client should refresh credentials and retry.
An unknown server-side problem occurred; the commit state is unknown.
A gateway or proxy received an invalid response from the upstream server; the commit state is unknown.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side gateway timeout occurred; the commit state is unknown.
A server-side problem that might not be addressable on the client.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given table does not exist", "type": "NoSuchTableException", "code": 404 } }
{ "error": { "message": "The server does not support this operation", "type": "UnsupportedOperationException", "code": 406 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Internal Server Error", "type": "CommitStateUnknownException", "code": 500 } }
{ "error": { "message": "Invalid response from the upstream server", "type": "CommitStateUnknownException", "code": 502 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Gateway timed out during commit", "type": "CommitStateUnknownException", "code": 504 } }
{ "error": { "message": "Bad Gateway", "type": "InternalServerError", "code": 502 } }
Drop a table from the catalog
Remove a table from the catalog
DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A table name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
sales
Query Parameters
Whether the user requested to purge the underlying table's data and metadata
Default:
false
curl -X DELETE -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/tables/table_name"
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchTableException, Table to drop does not exist
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given table does not exist", "type": "NoSuchTableException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Check if a table exists
Check if a table exists within a given namespace. The response does not contain a body.
HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A table name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
sales
curl -X HEAD -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/tables/table_name"
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchTableException, Table not found
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
Rename a table from its current name to a new name
Rename a table from one identifier to another. It's valid to move a table across namespaces
POST /v1/{prefix}/tables/rename
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Current table identifier to rename and new table identifier to rename to
Rename a table in the same namespace
{
"source": {
"namespace": [
"accounting"
],
"name": "paid"
},
"destination": {
"namespace": [
"accounting"
],
"name": "owed"
}
}
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"source":{"namespace":["accounting"],"name":"paid"},"destination":{"namespace":["accounting"],"name":"owed"}}' "https://{region}/mds/iceberg/v1/unity_test_catalog/tables/rename
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchTableException, Table to rename does not exist - NoSuchNamespaceException, The target namespace of the new table identifier does not exist
Not Acceptable / Unsupported Operation. The server does not support this operation.
Conflict - The target identifier to rename to already exists as a table or view
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given table does not exist", "type": "NoSuchTableException", "code": 404 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "The server does not support this operation", "type": "UnsupportedOperationException", "code": 406 } }
{ "$ref": "#/components/examples/TableAlreadyExistsError" }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Commit updates to multiple tables in an atomic operation
Commit updates to multiple tables in an atomic operation
POST /v1/{prefix}/transactions/commit
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Commit updates to multiple tables in an atomic operation
A commit for a single table consists of a table identifier with requirements and updates. Requirements are assertions that will be validated before attempting to make and commit changes. For example, assert-ref-snapshot-id
will check that a named ref's snapshot ID has a certain value.
Updates are changes to make to table metadata. For example, after asserting that the current main ref is at the expected snapshot, a commit may add a new child snapshot and set the ref to the new snapshot id.
List tables to update
Possible values: 0 ≤ number of items ≤ 250
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"table-changes":[{"requirements":[{"type":"assert-create"},{"type":"assert-create"}],"updates":[{"action":"<string>","uuid":"<string>"},{"action":"<string>","uuid":"<string>"}],"identifier":{"name":"<string>","namespace":["<string>","<string>"]}},{"requirements":[{"type":"assert-create"},{"type":"assert-create"}],"updates":[{"action":"<string>","uuid":"<string>"},{"action":"<string>","uuid":"<string>"}],"identifier":{"name":"<string>","namespace":["<string>","<string>"]}}]}' "https://{region}/mds/iceberg/v1/catalog_name/namespaces"
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchTableException, table to load does not exist
Conflict - CommitFailedException, one or more requirements failed. The client may retry.
Credentials have timed out. If possible, the client should refresh credentials and retry.
An unknown server-side problem occurred; the commit state is unknown.
A gateway or proxy received an invalid response from the upstream server; the commit state is unknown.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side gateway timeout occurred; the commit state is unknown.
A server-side problem that might not be addressable on the client.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given table does not exist", "type": "NoSuchTableException", "code": 404 } }
{ "error": { "message": "The server does not support this operation", "type": "UnsupportedOperationException", "code": 406 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Internal Server Error", "type": "CommitStateUnknownException", "code": 500 } }
{ "error": { "message": "Invalid response from the upstream server", "type": "CommitStateUnknownException", "code": 502 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Gateway timed out during commit", "type": "CommitStateUnknownException", "code": 504 } }
{ "error": { "message": "Bad Gateway", "type": "InternalServerError", "code": 502 } }
List all view identifiers underneath a given namespace
Return all view identifiers under this namespace
GET /v1/{prefix}/namespaces/{namespace}/views
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
Query Parameters
A token used to retrieve the next page of results in a paginated response
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
, allows empty valueFor servers that support pagination, this signals an upper bound of the number of results that a client will receive. For servers that do not support pagination, clients may receive results larger than the indicated
pageSize
.Possible values: 0 ≤ value ≤ 1000000000000000
curl -X GET -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/views"
Response
Return a next-page-token in the response if there are more results available. Otherwise returns null
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Identifiers
Possible values: 0 ≤ number of items ≤ 250, contains only unique items
Status Code
A list of table identifiers
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - The namespace specified does not exist
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "identifiers": [ { "namespace": [ "namespace_name" ], "name": "table_name" }, { "namespace": [ "namespace_name" ], "name": "table_name" } ] }
{ "identifiers": [] }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Create a view in the given namespace
Create a view in the given namespace.
POST /v1/{prefix}/namespaces/{namespace}/views
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
Request for creating view
name of view
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Schema
The view version to create, will replace the schema-id sent within the view-version with the id assigned to the provided schema
Properties
- properties
Additional properties
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
location
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"name":"restv3postman","view-version":{"version-id":1,"timestamp-ms":1727092678042,"schema-id":0,"summary":{"engine-version":"3.4.2","app-id":"local-1727085978831","engine-name":"spark","iceberg-version":"Apache Iceberg 1.5.2 (commit cbb853073e681b4075d7c8707610dceecbee3a82)"},"default-namespace":["rest_iceberg1"],"representations":[{"type":"sql","sql":"select id,age from spark_iceberg_table1view_rest007","dialect":"spark"}]},"schema":{"type":"struct","schema-id":0,"fields":[{"id":0,"name":"id","required":false,"type":"int"},{"id":1,"name":"age","required":false,"type":"int"}]},"properties":{"engine_version":"Spark 3.4.2","create_engine_version":"Spark 3.4.2","spark.query-column-names":"id,age"}}' "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/views"
Response
Result used when a view is successfully loaded.
The view metadata JSON is returned in the metadata
field. The corresponding file location of view metadata is returned in the metadata-location
field.
Clients can check whether metadata has changed by comparing metadata locations after the view has been created.
The config
map returns view-specific configuration for the view's resources.
The following configurations should be respected by clients:
General Configurations
token
: Authorization bearer token to use for view requests if OAuth2 security is enabled
location of view metadata
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
ViewMetadata
returns view-specific configuration for the view's resources
- config
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
View metadata result when loading a view
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - The namespace specified does not exist
Conflict - The view already exists
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "metadata-location": "string", "metadata": { "view-uuid": "string", "format-version": 1, "location": "string", "current-version-id": 0, "versions": [ { "version-id": 0, "timestamp-ms": 0, "schema-id": 0, "summary": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" }, "representations": [ { "type": "string", "sql": "string", "dialect": "string" } ], "default-catalog": "string", "default-namespace": [ "accounting", "tax" ] } ], "version-log": [ { "version-id": 0, "timestamp-ms": 0 } ], "schemas": [ { "type": "struct", "fields": [ { "id": 0, "name": "string", "type": [ "long", "string", "fixed[16]", "decimal(10,2)" ], "required": true, "doc": "string" } ], "schema-id": 0, "identifier-field-ids": [ 0 ] } ], "properties": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" } }, "config": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" } }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "The given view already exists", "type": "AlreadyExistsException", "code": 409 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Load a view from the catalog
Load a view from the catalog.
The response contains both view metadata.
The response also contains the view's full metadata, matching the view metadata JSON file.
GET /v1/{prefix}/namespaces/{namespace}/views/{view}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A view name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Example:
sales
curl -X GET -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/views/view_name"
Response
Result used when a view is successfully loaded.
The view metadata JSON is returned in the metadata
field. The corresponding file location of view metadata is returned in the metadata-location
field.
Clients can check whether metadata has changed by comparing metadata locations after the view has been created.
The config
map returns view-specific configuration for the view's resources.
The following configurations should be respected by clients:
General Configurations
token
: Authorization bearer token to use for view requests if OAuth2 security is enabled
location of view metadata
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
ViewMetadata
returns view-specific configuration for the view's resources
- config
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
View metadata result when loading a view
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchViewException, view to load does not exist
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "metadata-location": "string", "metadata": { "view-uuid": "string", "format-version": 1, "location": "string", "current-version-id": 0, "versions": [ { "version-id": 0, "timestamp-ms": 0, "schema-id": 0, "summary": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" }, "representations": [ { "type": "string", "sql": "string", "dialect": "string" } ], "default-catalog": "string", "default-namespace": [ "accounting", "tax" ] } ], "version-log": [ { "version-id": 0, "timestamp-ms": 0 } ], "schemas": [ { "type": "struct", "fields": [ { "id": 0, "name": "string", "type": [ "long", "string", "fixed[16]", "decimal(10,2)" ], "required": true, "doc": "string" } ], "schema-id": 0, "identifier-field-ids": [ 0 ] } ], "properties": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" } }, "config": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" } }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given view does not exist", "type": "NoSuchViewException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A view name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Example:
sales
Request for commit views
changes to make to table metadata
Possible values: 0 ≤ number of items ≤ 250
- updates
View identifier to update
assertions that will be validated before attempting to make and commit changes
Possible values: 0 ≤ number of items ≤ 250
- requirements
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"namespace":["accounting"],"properties":{"owner":"Hank Bendickson","storage_location":"s3a://bucket_name/accounting"}}' "https://{region}/mds/iceberg/v1/catalog_name/namespaces"
Response
Result used when a view is successfully loaded.
The view metadata JSON is returned in the metadata
field. The corresponding file location of view metadata is returned in the metadata-location
field.
Clients can check whether metadata has changed by comparing metadata locations after the view has been created.
The config
map returns view-specific configuration for the view's resources.
The following configurations should be respected by clients:
General Configurations
token
: Authorization bearer token to use for view requests if OAuth2 security is enabled
location of view metadata
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
ViewMetadata
returns view-specific configuration for the view's resources
- config
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Status Code
View metadata result when loading a view
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchViewException, view to load does not exist
Conflict - CommitFailedException. The client may retry.
Credentials have timed out. If possible, the client should refresh credentials and retry.
An unknown server-side problem occurred; the commit state is unknown.
A gateway or proxy received an invalid response from the upstream server; the commit state is unknown.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side gateway timeout occurred; the commit state is unknown.
A server-side problem that might not be addressable on the client.
{ "metadata-location": "string", "metadata": { "view-uuid": "string", "format-version": 1, "location": "string", "current-version-id": 0, "versions": [ { "version-id": 0, "timestamp-ms": 0, "schema-id": 0, "summary": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" }, "representations": [ { "type": "string", "sql": "string", "dialect": "string" } ], "default-catalog": "string", "default-namespace": [ "accounting", "tax" ] } ], "version-log": [ { "version-id": 0, "timestamp-ms": 0 } ], "schemas": [ { "type": "struct", "fields": [ { "id": 0, "name": "string", "type": [ "long", "string", "fixed[16]", "decimal(10,2)" ], "required": true, "doc": "string" } ], "schema-id": 0, "identifier-field-ids": [ 0 ] } ], "properties": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" } }, "config": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" } }
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given view does not exist", "type": "NoSuchViewException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Internal Server Error", "type": "CommitStateUnknownException", "code": 500 } }
{ "error": { "message": "Invalid response from the upstream server", "type": "CommitStateUnknownException", "code": 502 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Gateway timed out during commit", "type": "CommitStateUnknownException", "code": 504 } }
{ "error": { "message": "Bad Gateway", "type": "InternalServerError", "code": 502 } }
Drop a view from the catalog
Remove a view from the catalog
DELETE /v1/{prefix}/namespaces/{namespace}/views/{view}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A view name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Example:
sales
curl -X DELETE -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/views/view_name"
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchViewException, view to drop does not exist
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given view does not exist", "type": "NoSuchViewException", "code": 404 } }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }
Check if a view exists
Check if a view exists within a given namespace. This request does not return a response body.
HEAD /v1/{prefix}/namespaces/{namespace}/views/{view}
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
A namespace identifier as a single string. Multipart namespace not supported.
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Example:
accounting
A view name
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 -]*$
Example:
sales
curl -X HEAD -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" "https://{region}/mds/iceberg/v1/catalog_name/namespaces/namespace_name/views/view_name"
Response
Status Code
Success, no content
Bad Request
Unauthorized
Not Found
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
Rename a view from its current name to a new name
Rename a view from one identifier to another. It's valid to move a view across namespaces
POST /v1/{prefix}/views/rename
Request
Path Parameters
A prefix should be passs as wxd iceberg type catalog_name in the path
Possible values: 1 ≤ length ≤ 128, Value must match regular expression
^[a-zA-Z0-9 ]*$
Current view identifier to rename and new view identifier to rename to
Rename a view in the same namespace
{
"source": {
"namespace": [
"accounting"
],
"name": "paid-view"
},
"destination": {
"namespace": [
"accounting"
],
"name": "owed-view"
}
}
curl -X POST -H "accept: application/json" -H "Authorization: ••••••" -H "Content-Type: application/json" -d '{"destination":{"name":"restv2renamedinpostman","namespace":["accounting"]},"source":{"name":"restv3postman","namespace":["accounting"]}}' "https://{region}/mds/iceberg/v1/catalog_name/views/rename"
Response
Status Code
Success, no content
Indicates a bad request error. It could be caused by an unexpected request body format or other forms of request validation failure, such as invalid json. Usually serves application/json content, although in some cases simple text/plain content might be returned by the server's middleware.
Unauthorized. Authentication is required and has failed or has not yet been provided.
Forbidden. Authenticated user does not have the necessary permissions.
Not Found - NoSuchViewException, view to rename does not exist - NoSuchNamespaceException, The target namespace of the new identifier does not exist
Not Acceptable / Unsupported Operation. The server does not support this operation.
Conflict - The target identifier to rename to already exists as a table or view
Credentials have timed out. If possible, the client should refresh credentials and retry.
The service is not ready to handle the request. The client should wait and retry.
The service may additionally send a Retry-After header to indicate when to retry.
A server-side problem that might not be addressable from the client side. Used for server 5xx errors without more specific documentation in individual routes.
{ "error": { "message": "Malformed request", "type": "BadRequestException", "code": 400 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 401 } }
{ "error": { "message": "Not authorized to make this request", "type": "NotAuthorizedException", "code": 403 } }
{ "error": { "message": "The given view does not exist", "type": "NoSuchViewException", "code": 404 } }
{ "error": { "message": "The given namespace does not exist", "type": "NoSuchNamespaceException", "code": 404 } }
{ "error": { "message": "The server does not support this operation", "type": "UnsupportedOperationException", "code": 406 } }
{ "$ref": "#/components/examples/ViewAlreadyExistsError" }
{ "error": { "message": "Credentials have timed out", "type": "AuthenticationTimeoutException", "code": 419 } }
{ "error": { "message": "Slow down", "type": "SlowDownException", "code": 503 } }
{ "error": { "message": "Internal Server Error", "type": "InternalServerError", "code": 500 } }