Skip to Content
We are live but in Staging 🎉
Data EnginesSQLRecipesOverview

Recipes

Self-contained, runnable scenarios for the patterns developers actually ship with K3 Tables. Every recipe is grounded in real SQL, real RPCs, real CLI commands, and the warehouse-compatible Scriptum catalog.

What’s here

RecipeKey surfaceWhen you need it
Manual TableCREATE TABLE · INSERT / MERGE / UPDATE / DELETE · SELECT · OptimizeTable · CompactYou have structured data + know the schema. SQL-first workflow end-to-end.
Pipeline-bound TableCreateTablePipeline · ingest rules · SELECTYou have unstructured documents and want rows auto-extracted via a Scriptum template. Bridges Pipelines → Tables.
Time Travel & RestoreRESTORE TABLE … TO VERSION AS OF · VacuumTableRecover from bad writes; understand the vacuum-retention window that bounds recovery.
CTAS & MaterializeCREATE TABLE … AS SELECT · INSERT … SELECT · CREATE OR REPLACE TABLEDerive new tables from SQL queries — analytical ETL within K3.

Conventions used in these recipes

  • SQL-first. Table data, DDL and maintenance live on the tables data plane, and its native surface is SQL. Every recipe leads with a sql block and shows how to send it — psql, psycopg, or dodil data sql / dodil data table …. The control-plane REST API (api.data.dodil.io) does not serve table data.
  • Postgres wirepg.uk-lon-1.dodil.io:5432, sslmode=require (the door terminates TLS; prefer would fall back to plaintext silently, and your password here is your API-key/service-account secret), dbname = the bare bucket name. This is the only path with prepared statements, COPY FROM STDIN, cursors, savepoints and statement_timeout.
  • Tables HTTP doorhttps://table.uk-lon-1.dodil.io, canonical path POST /v1/databases/{bucket}/sql/execute. Used where a raw HTTP client is genuinely the point.
  • Bucket placeholder is kb-prod. Tables are implicit per bucket — there is no engine to enable.
  • Consistent example schema — most recipes use a fictional events table with composite PK (id, user_id), partition column event_type, and a JSON payload column. See Manual Table → step 1.

See also