---
title: "Create Table Provider"
method: POST
path: "/v1/table_providers"
tags: ["table_provider"]
---

# Create Table Provider

`POST /v1/table_providers`

## Request body

- CreateTableProviderRequest — Request to create a table provider.
  - `table_provider` TableProviderInput — A named, reusable provider of one relation owned by the workspace.
    - `name` string, required — Resource name in the form `table_providers/{table_provider}`.
    - `spec` TableProviderSpecInput — One declarative source of a relation.
      - `view` ViewTableProviderSpec — A SQL view exposed as a table.
        - `sql` string — SQL query that defines the view.
        - `dialect` 'SQL_DIALECT_UNSPECIFIED' | 'SQL_DIALECT_GENERIC' | 'SQL_DIALECT_MYSQL' | 'SQL_DIALECT_POSTGRESQL' | 'SQL_DIALECT_HIVE' | 'SQL_DIALECT_SQLITE' | 'SQL_DIALECT_SNOWFLAKE' | 'SQL_DIALECT_REDSHIFT' | 'SQL_DIALECT_MSSQL' | 'SQL_DIALECT_CLICKHOUSE' | 'SQL_DIALECT_BIGQUERY' | 'SQL_DIALECT_ANSI' | 'SQL_DIALECT_DUCKDB' | 'SQL_DIALECT_DATABRICKS' — SQL dialect used to parse a view query.
      - `listing` ListingTableProviderSpecInput — A table read from one or more absolute object-store or file URLs.
        - `table_paths` string[] — Paths must all resolve to the same object-store registration identity. The conversion boundary enforces this by parsing each URL canonically and comparing its scheme and authority; URI syntax validation alone cannot safely reproduce URL normalization for every supported scheme.
        - `file_schema` ArrowIpcSchema — An Arrow schema encoded as one canonical Arrow IPC schema message. The bytes contain only schema metadata, not an IPC stream, file, dictionary, record batch, or continuation marker. Consumers must reject any other IPC payload kind.
          - `ipc_message` string, binary, required
        - `options` ListingOptionsSpecInput
          - `format` FileFormatSpecInput
            - `arrow_ipc` ArrowIpcFileFormat
            - `csv` CsvFormatSpecInput
              - …
            - `json` JsonFormatSpecInput
              - …
            - `avro` AvroFileFormat
            - `parquet` ParquetFormatSpecInput
              - …
          - `file_extension` string, nullable
          - `table_partition_columns` ArrowIpcSchema — An Arrow schema encoded as one canonical Arrow IPC schema message. The bytes contain only schema metadata, not an IPC stream, file, dictionary, record batch, or continuation marker. Consumers must reject any other IPC payload kind.
            - `ipc_message` string, binary, required
          - `collect_stat` boolean
          - `target_partitions` integer, nullable — Omission selects one target partition.
      - `stream` FileStreamTableProviderSpecInput — An appendable, unbounded table backed by one local file stream.
        - `location` string, required
        - `schema` ArrowIpcSchema — An Arrow schema encoded as one canonical Arrow IPC schema message. The bytes contain only schema metadata, not an IPC stream, file, dictionary, record batch, or continuation marker. Consumers must reject any other IPC payload kind.
          - `ipc_message` string, binary, required
        - `encoding` 'STREAM_ENCODING_UNSPECIFIED' | 'STREAM_ENCODING_CSV' | 'STREAM_ENCODING_JSON'
        - `has_header` boolean
        - `batch_size` integer, nullable — Omission selects 1024 rows.
        - `constraints` StreamConstraintSpecInput[]
          - `primary_key` StreamConstraintColumnsInput
            - `columns` integer[] — Zero-based indexes into the ordered fields of the Arrow schema. Every index must exist in the schema. Primary-key fields must additionally be non-nullable; consumers validate those schema-dependent invariants after decoding the Arrow IPC metadata.
          - `unique` StreamConstraintColumnsInput
            - `columns` integer[] — Zero-based indexes into the ordered fields of the Arrow schema. Every index must exist in the schema. Primary-key fields must additionally be non-nullable; consumers validate those schema-dependent invariants after decoding the Arrow IPC metadata.
      - `iceberg` IcebergTableProviderSpecInput — One Iceberg table resolved through an Iceberg catalog connector.
        - `connector` ConnectorReference — A reference to a named connector definition.
          - `uri` string, required
        - `identifier` IcebergTableIdentifier
          - `namespace` string[]
          - `name` string, required
        - `access` IcebergTableAccessSpecInput
          - `catalog_backed` IcebergCatalogBackedAccess
          - `static` IcebergStaticAccessInput
            - `snapshot` IcebergSnapshotSelectorInput
              - …
          - `metadata` IcebergMetadataAccess
            - `table` 'ICEBERG_METADATA_TABLE_TYPE_UNSPECIFIED' | 'ICEBERG_METADATA_TABLE_TYPE_SNAPSHOTS' | 'ICEBERG_METADATA_TABLE_TYPE_MANIFESTS'
      - `relational` RelationalTableProviderSpec — A relation queried through a relational connector.
        - `connector` ConnectorReference — A reference to a named connector definition.
          - `uri` string, required
        - `source_catalog` string — Catalog name.
        - `source_schema` string — Schema name.
        - `source_table` string — Table name.
      - `extension` ExtensionSpec — A registered specification whose schema is selected by type_url.
        - `type_url` string, required — An absolute RFC 3986 URI identifying the payload schema.
        - `config` unknown
  - `table_provider_id` string, required — The ID to use for the table provider resource name.

## Response `201`

Successful Response

- TableProviderOutput — A named, reusable provider of one relation owned by the workspace.
  - `name` string, required — Resource name in the form `table_providers/{table_provider}`.
  - `spec` TableProviderSpecOutput — One declarative source of a relation.
    - `view` ViewTableProviderSpec — A SQL view exposed as a table.
      - `sql` string — SQL query that defines the view.
      - `dialect` 'SQL_DIALECT_UNSPECIFIED' | 'SQL_DIALECT_GENERIC' | 'SQL_DIALECT_MYSQL' | 'SQL_DIALECT_POSTGRESQL' | 'SQL_DIALECT_HIVE' | 'SQL_DIALECT_SQLITE' | 'SQL_DIALECT_SNOWFLAKE' | 'SQL_DIALECT_REDSHIFT' | 'SQL_DIALECT_MSSQL' | 'SQL_DIALECT_CLICKHOUSE' | 'SQL_DIALECT_BIGQUERY' | 'SQL_DIALECT_ANSI' | 'SQL_DIALECT_DUCKDB' | 'SQL_DIALECT_DATABRICKS' — SQL dialect used to parse a view query.
    - `listing` ListingTableProviderSpecOutput — A table read from one or more absolute object-store or file URLs.
      - `table_paths` string[] — Paths must all resolve to the same object-store registration identity. The conversion boundary enforces this by parsing each URL canonically and comparing its scheme and authority; URI syntax validation alone cannot safely reproduce URL normalization for every supported scheme.
      - `file_schema` ArrowIpcSchema — An Arrow schema encoded as one canonical Arrow IPC schema message. The bytes contain only schema metadata, not an IPC stream, file, dictionary, record batch, or continuation marker. Consumers must reject any other IPC payload kind.
        - `ipc_message` string, binary, required
      - `options` ListingOptionsSpecOutput
        - `format` FileFormatSpecOutput
          - `arrow_ipc` ArrowIpcFileFormat
          - `csv` CsvFormatSpecOutput
            - `has_header` boolean, nullable
            - `delimiter` integer, nullable
            - `quote` integer, nullable
            - `terminator` integer, nullable
            - `escape` integer, nullable
            - `double_quote` boolean, nullable
            - `quote_style` 'CSV_QUOTE_STYLE_UNSPECIFIED' | 'CSV_QUOTE_STYLE_ALWAYS' | 'CSV_QUOTE_STYLE_NECESSARY' | 'CSV_QUOTE_STYLE_NON_NUMERIC' | 'CSV_QUOTE_STYLE_NEVER'
            - `ignore_leading_whitespace` boolean, nullable
            - `ignore_trailing_whitespace` boolean, nullable
            - `newlines_in_values` boolean, nullable
            - `compression` 'COMPRESSION_TYPE_UNSPECIFIED' | 'COMPRESSION_TYPE_GZIP' | 'COMPRESSION_TYPE_BZIP2' | 'COMPRESSION_TYPE_XZ' | 'COMPRESSION_TYPE_ZSTD' | 'COMPRESSION_TYPE_UNCOMPRESSED'
            - `compression_level` integer, nullable
            - `schema_infer_max_records` string, nullable
            - `date_format` string, nullable
            - `datetime_format` string, nullable
            - `timestamp_format` string, nullable
            - `timestamp_timezone_format` string, nullable
            - `time_format` string, nullable
            - `null_value` string, nullable
            - `null_regex` string, nullable
            - `comment` integer, nullable
            - `truncated_rows` boolean, nullable
          - `json` JsonFormatSpecOutput
            - `compression` 'COMPRESSION_TYPE_UNSPECIFIED' | 'COMPRESSION_TYPE_GZIP' | 'COMPRESSION_TYPE_BZIP2' | 'COMPRESSION_TYPE_XZ' | 'COMPRESSION_TYPE_ZSTD' | 'COMPRESSION_TYPE_UNCOMPRESSED'
            - `compression_level` integer, nullable
            - `schema_infer_max_records` string, nullable
            - `newline_delimited` boolean, nullable — Omission selects newline-delimited JSON.
          - `avro` AvroFileFormat
          - `parquet` ParquetFormatSpecOutput
            - `enable_page_index` boolean, nullable
            - `pruning` boolean, nullable
            - `skip_metadata` boolean, nullable
            - `metadata_size_hint` ParquetMetadataSizeHintSpecOutput
              - …
            - `pushdown_filters` boolean, nullable
            - `reorder_filters` boolean, nullable
            - `force_filter_selections` boolean, nullable
            - `schema_force_view_types` boolean, nullable
            - `binary_as_string` boolean, nullable
            - `coerce_int96` string, nullable
            - `coerce_int96_timezone` string, nullable
            - `bloom_filter_on_read` boolean, nullable
            - `max_predicate_cache_size` string, nullable
        - `file_extension` string, nullable
        - `table_partition_columns` ArrowIpcSchema — An Arrow schema encoded as one canonical Arrow IPC schema message. The bytes contain only schema metadata, not an IPC stream, file, dictionary, record batch, or continuation marker. Consumers must reject any other IPC payload kind.
          - `ipc_message` string, binary, required
        - `collect_stat` boolean
        - `target_partitions` string, nullable — Omission selects one target partition.
    - `stream` FileStreamTableProviderSpecOutput — An appendable, unbounded table backed by one local file stream.
      - `location` string, required
      - `schema` ArrowIpcSchema — An Arrow schema encoded as one canonical Arrow IPC schema message. The bytes contain only schema metadata, not an IPC stream, file, dictionary, record batch, or continuation marker. Consumers must reject any other IPC payload kind.
        - `ipc_message` string, binary, required
      - `encoding` 'STREAM_ENCODING_UNSPECIFIED' | 'STREAM_ENCODING_CSV' | 'STREAM_ENCODING_JSON'
      - `has_header` boolean
      - `batch_size` string, nullable — Omission selects 1024 rows.
      - `constraints` StreamConstraintSpecOutput[]
        - `primary_key` StreamConstraintColumnsOutput
          - `columns` string[] — Zero-based indexes into the ordered fields of the Arrow schema. Every index must exist in the schema. Primary-key fields must additionally be non-nullable; consumers validate those schema-dependent invariants after decoding the Arrow IPC metadata.
        - `unique` StreamConstraintColumnsOutput
          - `columns` string[] — Zero-based indexes into the ordered fields of the Arrow schema. Every index must exist in the schema. Primary-key fields must additionally be non-nullable; consumers validate those schema-dependent invariants after decoding the Arrow IPC metadata.
    - `iceberg` IcebergTableProviderSpecOutput — One Iceberg table resolved through an Iceberg catalog connector.
      - `connector` ConnectorReference — A reference to a named connector definition.
        - `uri` string, required
      - `identifier` IcebergTableIdentifier
        - `namespace` string[]
        - `name` string, required
      - `access` IcebergTableAccessSpecOutput
        - `catalog_backed` IcebergCatalogBackedAccess
        - `static` IcebergStaticAccessOutput
          - `snapshot` IcebergSnapshotSelectorOutput
            - `snapshot_id` string, nullable — Only one of the fields can be specified with: ["snapshot_id", "reference", "as_of"] (oneof selector)
            - `reference` string, nullable — Only one of the fields can be specified with: ["snapshot_id", "reference", "as_of"] (oneof selector)
            - `as_of` string, nullable — Select the newest current-lineage snapshot committed at or before this UTC instant. Millisecond precision matches Iceberg commit timestamps. Only one of the fields can be specified with: ["snapshot_id", "reference", "as_of"] (oneof selector)
        - `metadata` IcebergMetadataAccess
          - `table` 'ICEBERG_METADATA_TABLE_TYPE_UNSPECIFIED' | 'ICEBERG_METADATA_TABLE_TYPE_SNAPSHOTS' | 'ICEBERG_METADATA_TABLE_TYPE_MANIFESTS'
    - `relational` RelationalTableProviderSpec — A relation queried through a relational connector.
      - `connector` ConnectorReference — A reference to a named connector definition.
        - `uri` string, required
      - `source_catalog` string — Catalog name.
      - `source_schema` string — Schema name.
      - `source_table` string — Table name.
    - `extension` ExtensionSpec — A registered specification whose schema is selected by type_url.
      - `type_url` string, required — An absolute RFC 3986 URI identifying the payload schema.
      - `config` unknown

## Other responses

- `422` — Validation Error

## Changes

- **2026-07-26** `17afb53a6ac9` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/outerproduct/apis/outerproduct-api/changes/v1/table_providers/post.md)

---

[API](https://skmtc.dev/outerproduct/apis/outerproduct-api.md) · [All operations](https://skmtc.dev/outerproduct/apis/outerproduct-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/outerproduct/outerproduct-api/revisions/17afb53a6ac9/schema)
