Skip to content

Implement Apache Iceberg REST Catalog Specification #273

@HeartLinked

Description

@HeartLinked

This issue tracks the implementation progress of the Apache Iceberg REST Catalog API specification in iceberg-cpp. The goal is to provide a comprehensive and fully compliant C++ implementation of the REST Catalog standard, enabling interaction with any Iceberg-compatible catalog service.

The following checklists are generated from the official Iceberg REST Catalog specification. Once your contribution has been merged, you should update the checklist.

API Paths

  • GET /v1/config - List all catalog configuration settings
  • POST /v1/oauth/tokens - Get a token using an OAuth2 flow (DEPRECATED for REMOVAL)
  • GET /v1/{prefix}/namespaces - List namespaces, optionally providing a parent namespace to list underneath
  • POST /v1/{prefix}/namespaces - Create a namespace
  • GET /v1/{prefix}/namespaces/{namespace} - Load the metadata properties for a namespace
  • HEAD /v1/{prefix}/namespaces/{namespace} - Check if a namespace exists
  • DELETE /v1/{prefix}/namespaces/{namespace} - Drop a namespace from the catalog. Namespace must be empty.
  • POST /v1/{prefix}/namespaces/{namespace}/properties - Set or remove properties on a namespace
  • GET /v1/{prefix}/namespaces/{namespace}/tables - List all table identifiers underneath a given namespace
  • POST /v1/{prefix}/namespaces/{namespace}/tables - Create a table in the given namespace
  • POST /v1/{prefix}/namespaces/{namespace}/tables/{table}/plan - Submit a scan for planning
  • GET /v1/{prefix}/namespaces/{namespace}/tables/{table}/plan/{plan-id} - Fetches the result of scan planning for a plan-id
  • DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}/plan/{plan-id} - Cancels scan planning for a plan-id
  • POST /v1/{prefix}/namespaces/{namespace}/tables/{table}/tasks - Fetches result tasks for a plan task
  • POST /v1/{prefix}/namespaces/{namespace}/register - Register a table in the given namespace using given metadata file location
  • GET /v1/{prefix}/namespaces/{namespace}/tables/{table} - Load a table from the catalog
  • POST /v1/{prefix}/namespaces/{namespace}/tables/{table} - Commit updates to a table
  • DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table} - Drop a table from the catalog
  • HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table} - Check if a table exists
  • GET /v1/{prefix}/namespaces/{namespace}/tables/{table}/credentials - Load vended credentials for a table from the catalog
  • POST /v1/{prefix}/tables/rename - Rename a table from its current name to a new name
  • POST /v1/{prefix}/namespaces/{namespace}/tables/{table}/metrics - Send a metrics report to this endpoint to be processed by the backend
  • POST /v1/{prefix}/transactions/commit - Commit updates to multiple tables in an atomic operation
  • GET /v1/{prefix}/namespaces/{namespace}/views - List all view identifiers underneath a given namespace
  • POST /v1/{prefix}/namespaces/{namespace}/views - Create a view in the given namespace
  • GET /v1/{prefix}/namespaces/{namespace}/views/{view} - Load a view from the catalog
  • POST /v1/{prefix}/namespaces/{namespace}/views/{view} - Replace a view
  • DELETE /v1/{prefix}/namespaces/{namespace}/views/{view} - Drop a view from the catalog
  • HEAD /v1/{prefix}/namespaces/{namespace}/views/{view} - Check if a view exists
  • POST /v1/{prefix}/views/rename - Rename a view from its current name to a new name

Application Schema Objects

  • ErrorModel - JSON error payload returned in a response with further details on the error
  • CatalogConfig - Server-provided configuration for the catalog.
  • CreateNamespaceRequest - Request to create a namespace.
  • UpdateNamespacePropertiesRequest - Request to set or remove properties on a namespace.
  • RenameTableRequest - Request to rename a table or view.
  • Namespace - Reference to one or more levels of a namespace
  • PageToken - An opaque token that allows clients to make use of pagination for list APIs
  • TableIdentifier - Identifies a table in a namespace.
  • PrimitiveType - A primitive type.
  • StructField - A struct field.
  • StructType - A struct type.
  • ListType - A list type.
  • MapType - A map type.
  • Type - A type definition.
  • Schema - A table schema.
  • Expression - A boolean expression.
  • ExpressionType - An expression type.
  • TrueExpression - A boolean expression that is always true.
  • FalseExpression - A boolean expression that is always false.
  • AndOrExpression - A boolean AND or OR expression.
  • NotExpression - A boolean NOT expression.
  • UnaryExpression - A unary expression.
  • LiteralExpression - A literal expression.
  • SetExpression - A set expression.
  • Term - A term in an expression.
  • Reference - A reference to a column.
  • TransformTerm - A transformed term.
  • Transform - A transform function.
  • PartitionField - A partition field.
  • PartitionSpec - A partition specification.
  • SortDirection - A sort direction.
  • NullOrder - A null order.
  • SortField - A sort field.
  • SortOrder - A sort order.
  • EncryptedKey - An encrypted key.
  • Snapshot - A table snapshot.
  • SnapshotReference - A reference to a snapshot.
  • SnapshotReferences - A map of snapshot references.
  • SnapshotLog - A log of snapshots.
  • MetadataLog - A log of metadata files.
  • TableMetadata - The complete metadata for a table.
  • SQLViewRepresentation - A SQL view representation.
  • ViewRepresentation - A view representation.
  • ViewHistoryEntry - A view history entry.
  • ViewVersion - A view version.
  • ViewMetadata - The complete metadata for a view.
  • BaseUpdate - The base type for all table and view updates.
  • AssignUUIDUpdate - An update to assign a UUID to a table or view.
  • UpgradeFormatVersionUpdate - An update to upgrade the format version of a table or view.
  • AddSchemaUpdate - An update to add a schema to a table.
  • SetCurrentSchemaUpdate - An update to set the current schema of a table.
  • AddPartitionSpecUpdate - An update to add a partition spec to a table.
  • SetDefaultSpecUpdate - An update to set the default partition spec of a table.
  • AddSortOrderUpdate - An update to add a sort order to a table.
  • SetDefaultSortOrderUpdate - An update to set the default sort order of a table.
  • AddSnapshotUpdate - An update to add a snapshot to a table.
  • SetSnapshotRefUpdate - An update to set a snapshot reference.
  • RemoveSnapshotsUpdate - An update to remove snapshots from a table.
  • RemoveSnapshotRefUpdate - An update to remove a snapshot reference.
  • SetLocationUpdate - An update to set the location of a table or view.
  • SetPropertiesUpdate - An update to set properties on a table or view.
  • RemovePropertiesUpdate - An update to remove properties from a table or view.
  • AddViewVersionUpdate - An update to add a view version.
  • SetCurrentViewVersionUpdate - An update to set the current view version.
  • SetStatisticsUpdate - An update to set statistics for a snapshot.
  • RemoveStatisticsUpdate - An update to remove statistics for a snapshot.
  • SetPartitionStatisticsUpdate - An update to set partition statistics for a snapshot.
  • RemovePartitionStatisticsUpdate - An update to remove partition statistics for a snapshot.
  • RemovePartitionSpecsUpdate - An update to remove partition specs from a table.
  • RemoveSchemasUpdate - An update to remove schemas from a table.
  • AddEncryptionKeyUpdate - An update to add an encryption key to a table.
  • RemoveEncryptionKeyUpdate - An update to remove an encryption key from a table.
  • TableUpdate - A table update.
  • ViewUpdate - A view update.
  • TableRequirement - A requirement for a table commit.
  • AssertCreate - A requirement that the table does not exist.
  • AssertTableUUID - A requirement that the table has a specific UUID.
  • AssertRefSnapshotId - A requirement that a ref points to a specific snapshot.
  • AssertLastAssignedFieldId - A requirement on the last assigned field ID.
  • AssertCurrentSchemaId - A requirement on the current schema ID.
  • AssertLastAssignedPartitionId - A requirement on the last assigned partition ID.
  • AssertDefaultSpecId - A requirement on the default spec ID.
  • AssertDefaultSortOrderId - A requirement on the default sort order ID.
  • ViewRequirement - A requirement for a view commit.
  • AssertViewUUID - A requirement that the view has a specific UUID.
  • StorageCredential - Vended credentials for a storage location.
  • LoadCredentialsResponse - Response for loading vended credentials.
  • LoadTableResult - Result used when a table is successfully loaded.
  • ScanTasks - Scan and planning tasks for server-side scan planning.
  • CompletedPlanningResult - Completed server-side planning result.
  • CompletedPlanningWithIDResult - Completed server-side planning result with a plan-id.
  • FailedPlanningResult - Failed server-side planning result.
  • AsyncPlanningResult - Asynchronous server-side planning result.
  • EmptyPlanningResult - Empty server-side planning result.
  • PlanStatus - Status of a server-side planning operation.
  • FetchPlanningResult - Result of server-side scan planning for fetchPlanningResult.
  • PlanTableScanResult - Result of server-side scan planning for planTableScan.
  • FetchScanTasksResult - Response schema for fetchScanTasks.
  • CommitTableRequest - Request to commit updates to a table.
  • CommitViewRequest - Request to commit updates to a view.
  • CommitTransactionRequest - Request to commit updates to multiple tables in a transaction.
  • CreateTableRequest - Request to create a table.
  • RegisterTableRequest - Request to register a table.
  • CreateViewRequest - Request to create a view.
  • LoadViewResult - Result used when a view is successfully loaded.
  • TokenType - Token type identifier, from RFC 8693 Section 3.
  • OAuthClientCredentialsRequest - OAuth2 client credentials request.
  • OAuthTokenExchangeRequest - OAuth2 token exchange request.
  • OAuthTokenRequest - OAuth2 token request.
  • CounterResult - A counter metric result.
  • TimerResult - A timer metric result.
  • MetricResult - A metric result.
  • Metrics - A collection of metrics.
  • ReportMetricsRequest - A request to report metrics.
  • ScanReport - A scan report.
  • CommitReport - A commit report.
  • OAuthError - OAuth2 error response.
  • OAuthTokenResponse - OAuth2 token response.
  • IcebergErrorResponse - JSON wrapper for all error responses (non-2xx).
  • CreateNamespaceResponse - Response for a successful call to create a namespace.
  • GetNamespaceResponse - Response for a successful call to get a namespace.
  • ListTablesResponse - A list of table identifiers.
  • ListNamespacesResponse - A list of namespaces.
  • UpdateNamespacePropertiesResponse - JSON data response for a synchronous update properties request.
  • CommitTableResponse - Response used when a table is successfully updated.
  • StatisticsFile - A statistics file.
  • BlobMetadata - Blob metadata.
  • PartitionStatisticsFile - A partition statistics file.
  • BooleanTypeValue - A boolean type value.
  • IntegerTypeValue - An integer type value.
  • LongTypeValue - A long type value.
  • FloatTypeValue - A float type value.
  • DoubleTypeValue - A double type value.
  • DecimalTypeValue - A decimal type value.
  • StringTypeValue - A string type value.
  • UUIDTypeValue - A UUID type value.
  • DateTypeValue - A date type value.
  • TimeTypeValue - A time type value.
  • TimestampTypeValue - A timestamp type value.
  • TimestampTzTypeValue - A timestamp with timezone type value.
  • TimestampNanoTypeValue - A timestamp with nanosecond precision type value.
  • TimestampTzNanoTypeValue - A timestamp with timezone and nanosecond precision type value.
  • FixedTypeValue - A fixed length type value.
  • BinaryTypeValue - A binary type value.
  • CountMap - A map of column id to total count.
  • ValueMap - A map of column id to primitive type values.
  • PrimitiveTypeValue - A primitive type value.
  • FileFormat - A file format.
  • ContentFile - A content file.
  • DataFile - A data file.
  • DeleteFile - A delete file.
  • PositionDeleteFile - A position delete file.
  • EqualityDeleteFile - An equality delete file.
  • PlanTableScanRequest - A request to plan a table scan.
  • FieldName - A full field name.
  • FetchScanTasksRequest - A request to fetch scan tasks.
  • PlanTask - An opaque string provided by the REST server that represents a unit of work to produce file scan tasks for scan planning.
  • FileScanTask - A file scan task.

Reusable Response Objects

  • OAuthTokenResponse - OAuth2 token response for client credentials or token exchange
  • OAuthErrorResponse - OAuth2 error response
  • BadRequestErrorResponse - Indicates a bad request error.
  • UnauthorizedResponse - Unauthorized.
  • ForbiddenResponse - Forbidden. Authenticated user does not have the necessary permissions.
  • UnsupportedOperationResponse - Not Acceptable / Unsupported Operation. The server does not support this operation.
  • IcebergErrorResponse - JSON wrapper for all error responses (non-2xx)
  • CreateNamespaceResponse - Represents a successful call to create a namespace.
  • GetNamespaceResponse - Returns a namespace, as well as any properties stored on the namespace.
  • ListTablesResponse - A list of table identifiers
  • ListNamespacesResponse - A list of namespaces
  • AuthenticationTimeoutResponse - Optional status response type that the REST Catalog can issue when the token has expired.
  • ServiceUnavailableResponse - The service is not ready to handle the request.
  • ServerErrorResponse - A server-side problem that might not be addressable from the client side.
  • UpdateNamespacePropertiesResponse - JSON data response for a synchronous update properties request.
  • CreateTableResponse - Table metadata result after creating a table
  • PlanTableScanResponse - Result of submitting a table scan to plan
  • FetchPlanningResultResponse - Result of fetching a submitted scan planning operation
  • FetchScanTasksResponse - Result of retrieving additional plan tasks and file scan tasks.
  • LoadTableResponse - Table metadata result when loading a table
  • LoadViewResponse - View metadata result when loading a view
  • CommitTableResponse - Response used when a table is successfully updated.
  • LoadCredentialsResponse - Table credentials result when loading credentials for a table

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions