> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oleander.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Confluent Tableflow

> Register Confluent Tableflow to query Kafka topics as Iceberg tables.

> Alpha: Tableflow support and these docs may change.

[Confluent Tableflow](https://docs.confluent.io/cloud/current/topics/tableflow/overview.html) materializes Kafka topics as Iceberg tables. Registering its REST catalog makes those topics queryable from the lake.

> [!NOTE]
>
> Tableflow catalogs are **read-only**: writes, loads, and DDL are refused. Only AWS clusters using Confluent Managed Storage are supported.

## Setup

### 1. Get the endpoint and an API key

In Confluent Cloud:

1. Open **Tableflow → API access** and copy the **REST Catalog Endpoint**. It looks like `https://tableflow.<region>.aws.confluent.cloud/iceberg/catalog/organizations/<org-id>/environments/<env-id>`.
2. Create an API key with the **Tableflow** resource scope. Keep the key and secret.

### 2. Register the catalog

1. Open [Settings → Lake](https://oleander.dev/app/settings/lake) and find **External catalogs**.
2. Select **Confluent Tableflow** and fill in the fields:

| Field | Description |
| - | - |
| **Catalog name** | A short name, e.g. `kafka` |
| **Catalog URI** | The REST Catalog Endpoint from step 1. The region is read from it. |
| **API key** | The Tableflow API key |
| **API secret** | The Tableflow API secret |

oleander checks the key against Confluent before saving. The key and secret are stored encrypted and are not shown again; re-enter both when editing the catalog.

Or from the [CLI](https://docs.oleander.dev/cli/lake.md#register-a-catalog), piping the secret on stdin:

```bash theme={null}
printenv CONFLUENT_API_SECRET | oleander catalogs register kafka \
  --type tableflow \
  --catalog-uri https://tableflow.us-east-2.aws.confluent.cloud/iceberg/catalog/organizations/<org-id>/environments/<env-id> \
  --api-key <api-key>
```

## Query

Tables appear under the **Kafka cluster ID**, not the cluster name, with one table per topic. Test the catalog from the CLI:

```bash theme={null}
oleander query '
  SELECT *
  FROM kafka."lkc-abc123".orders
  LIMIT 100
' --engine duckdb
```

Drop `--engine duckdb` to let oleander pick the engine automatically.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.