[SS-372] docs: document Iceberg sinks to self-managed REST catalogs - #37965
[SS-372] docs: document Iceberg sinks to self-managed REST catalogs#37965ohbadiah wants to merge 1 commit into
Conversation
Add a guide for sinking to a self-managed Iceberg REST catalog backed by S3-compatible object storage, the configuration our test suite exercises with Apache Polaris and MinIO. Covers the OAuth2 client credentials connection options, the storage credential vending requirement, and the table maintenance responsibilities that managed offerings otherwise handle. Also adds the generic REST catalog syntax and example to the CREATE CONNECTION reference. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
| specification](https://iceberg.apache.org/rest-catalog-spec/), reachable | ||
| from your Materialize deployment. | ||
| - The catalog must support **OAuth2 client credentials** authentication. | ||
| - The catalog must support **storage credential vending** (also called access |
There was a problem hiding this comment.
Claude has invented this bit. We don't support vended credentials. Our tests with Polaris + MinIO use a separate AWS Connection object (i.e. standalone credentials, not vended credentials) to talk to MinIO S3.
EDIT: I misread the test cases. Forgot about this bit:
materialize/test/iceberg/catalog.td
Lines 31 to 32 in a32ac9b
There was a problem hiding this comment.
Wait a second, Claude may be onto something. I think this is a nonstandard vended credentials path that kind of works, but maybe only for short-lived runs like our tests.
There was a problem hiding this comment.
haha amazing that's so odd. hmm, what about a path that doesn't involve vended credentials - @ublubu could we document the path that uses standalone credentials just to be safe? That's the more generic approach anyway; not every catalog supports vended credentials
There was a problem hiding this comment.
Okay, I looked further, and it's not real vended credentials. Polaris actually forwards the AWS access key and secret that we configured it with. So it probably would work, assuming there aren't security concerns with this approach.
materialize/src/storage-types/src/connections.rs
Lines 931 to 934 in a32ac9b
There was a problem hiding this comment.
Specifying standalone storage credentials is reasonable, and the SQL syntax is there (as evidenced by the dead code in the test I linked above), but we'd need some code changes to make it actually do something.
Motivation
Documentation. Our Iceberg sink docs cover AWS S3 Tables and GCP BigLake, but the sink also works against any spec-compliant Iceberg REST catalog with S3-compatible object storage, which is exactly the configuration our test suite exercises (Apache Polaris + MinIO). Users who prefer plain S3 with a self-managed catalog over a managed offering currently have no documented path.
Changes
/serve-results/sink/iceberg-rest/("Self-managed (REST catalog)") alongside the S3 Tables and BigLake guides, marked private preview. It documents:CATALOG TYPE = 'rest'connection with OAuth2 client credentials (CREDENTIAL, optionalSCOPEandWAREHOUSE),CREATE CONNECTIONreference: adds the self-managed REST catalog row, syntax tab, and example./serve-results/sink/iceberg/links the new guide.The credential vending behavior and option semantics were verified against
IcebergCatalogConnection::connect_restinsrc/storage-types/src/connections.rsand the planning rules insrc/sql/src/plan/statement/ddl/connection.rs. The example mirrorstest/iceberg/catalog.td.Docs-only change, verified with a local Hugo build. No tests added or modified.
Tips for reviewer
The GCP BigLake page also uses
CATALOG TYPE = 'rest'with a GCP connection, so the catalog type table in theCREATE CONNECTIONreference now lists'rest'twice, distinguished by authentication method.Checklist
T-protolabel.🤖 Generated with Claude Code