dodil data table — lifecycle
Manage tables. Create, inspect and drop them, browse the template catalog, and bind a table to a pipeline. Mirrors Tables — API Reference.
Persistent flag on the whole group: --bucket / -b.
These are SQL verbs, not a separate API.
list,getanddescribebuild one SQL statement and send it throughdodil.tables.v1.Tables/Executeon the tables-gateway (cli-shell/cli-k3/cmd/table_helpers.go:39). There is noListTables,GetTable,DescribeTableorListPartitionsRPC — those never shipped. Anything the typed subcommands don’t cover, you write as SQL and send withdodil data sql.
dodil data table create
dodil data table create [name] -b BUCKET [flags]| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--description | -d | string | — | Table description |
--columns-json | — | string | — | JSON array of column descriptors |
--partition-column | — | string list (repeat) | [] | Partition columns. Repeat for multi-column partitioning. |
--merge-key | — | string list (repeat) | [] | Primary-key columns. Repeat for a composite PK. Drives keyed write routing. |
SQL
CREATE TABLE events (
id BIGINT NOT NULL,
user_id VARCHAR NOT NULL,
occurred_at TIMESTAMP NOT NULL,
event_type VARCHAR NOT NULL,
payload JSON,
PRIMARY KEY (id, user_id)
)
PARTITIONED BY (event_type);Column type is a SQL type string, not an enum — there is no COLUMN_TYPE_* vocabulary. The CLI normalizes a few aliases (int/integer/long/int64 → BIGINT, string/text → VARCHAR, float/real → DOUBLE, bool → BOOLEAN, bytes → BLOB) and passes anything else through uppercased, so VECTOR(768) and DECIMAL(18,2) work. Full list: SQL Compatibility → Column types.
--merge-key populates TableSpec.pk_columns. Omit it and the table has no primary key — which means no WAL, and writes that append straight to Delta.
There is no --source or --pipeline-template-id flag. Pipeline-bound tables are a different command — see table pipeline create below.
dodil data table list
dodil data table list -b BUCKETRuns SHOW TABLES. Returns the table names and each one’s primary-key columns:
table pk_columns
audit_tags id
clients id
contacts id
products id
(4 rows)dodil data table list -b kb-prod -o json | jq '.rows[] | .table'dodil data table describe (and get)
dodil data table describe [name] -b BUCKET
dodil data table get [name] -b BUCKET # alias — identical code pathRuns DESCRIBE "<name>". get is an alias of describe, not a lighter-weight metadata read — both execute the same statement and print the same thing.
column type nullable pk default
id long false true
name string true false
industry string true false
created_day long true falseNote the type column reports the stored vocabulary type (long, string, timestamp, json, …), not the SQL spelling you declared. A column created as INTEGER describes as long — the integer family is 64-bit throughout.
dodil data table describe events -b kb-prod -o json | jq '.rows[] | select(.pk)'For storage, WAL backlog, residency and reject counters — the numbers the old describe page promised — use GetDatabaseStats. See Schema → Database stats.
dodil data table delete
dodil data table delete [name] -b BUCKETRuns DROP TABLE. Permanently removes the table — Delta directory and catalog row. Does not cascade to a pipeline-bound table’s pipeline or its ingest rule; clean those up separately via the Pipelines API.
dodil data table templates
dodil data table templates [--search TEXT] [--label KEY=VALUE]Browse the warehouse-compatible subset of the Scriptum template catalog — the templates you can pass to dodil data table pipeline create -t <id>. Server-side filtered to the table facet.
| Flag | Type | Description |
|---|---|---|
--search | string | Free-text match against name + description |
--label | string list (repeat) | Filter by label key=value. Repeat for multiple — all must match (AND). |
There is no --category flag on this subcommand; category filtering lives on the org-wide dodil data template list. The catalog is org-scoped — -b is inherited from the parent group and ignored here, so you can omit it.
# All warehouse-compatible templates
dodil data table templates
# Free-text search
dodil data table templates --search invoice
# Label filter
dodil data table templates --label modality=pdfThe catalog with one-line descriptions lives at API Reference → Templates.
dodil data template listvsdodil data table templates— the top-leveltemplate listreturns all templates across pillars and accepts--category; this Tables variant pre-filters to warehouse-compatible only and does not. Both are org-scoped.
dodil data table pipeline
dodil data table pipeline create [name] -b BUCKET -t TEMPLATE_ID [--folder-prefix PREFIX]
dodil data table pipeline list -b BUCKETCreates a pipeline-bound table: a Scriptum template owns the schema, and rows materialize as matching documents land in the bucket.
| Flag | Short | Description |
|---|---|---|
--template | -t | Table pipeline template id (required) — see table templates |
--description | -d | Description |
--folder-prefix | — | Only files under this prefix trigger the pipeline (default: all) |
dodil data table pipeline create entities -b kb-prod \
--description "Auto-extracted entities + PII" \
-t entity_pii_extraction \
--folder-prefix intake/This does not start ingesting. Creating the pipeline binds the template to a table; it does not create an ingest rule. Scope one at the pipeline as a separate, mandatory step — see Templates → Using a template.
dodil data recipe installis the exception: it creates the collection and binds the rule.
dodil data table view-url
dodil data table view-url [name] -b BUCKET [--sql SQL] [--console-base ORIGIN]Prints a console deep-link that opens the table’s spreadsheet editor. --sql pre-fills a statement — and auto-runs it if it’s read-shaped.
dodil data table view-url events -b kb-prod \
--sql "SELECT * FROM events WHERE event_type = 'purchase' LIMIT 100"Large results spool
Any of these commands can return a spooled result instead of inline rows: above a size threshold the plane writes the result parts to object storage and returns a manifest of presigned GETs. The CLI prints
(result spooled to object storage: N rows across M part(s); re-run with a LIMIT or fetch the presigned parts)rather than a table. Add a LIMIT, or pull the parts yourself. See Execute → Spooled results.
Operations with no typed subcommand
Each of these is a SQL statement — send it with dodil data sql -b BUCKET "<sql>".
| Operation | Statement |
|---|---|
| Add / drop / widen a column | ALTER TABLE t ADD COLUMN … · DROP COLUMN … · ALTER COLUMN … SET DATA TYPE … |
| Clear a table | TRUNCATE TABLE t |
| Create a table from a query | CREATE TABLE t2 AS SELECT … (CTAS) |
| Replace a table atomically | CREATE OR REPLACE TABLE t AS SELECT … |
| Secondary index | CREATE INDEX … |
| Time travel | SELECT … VERSION AS OF n |
| Restore | RESTORE TABLE t TO VERSION AS OF n — destroys the tail, see Maintenance → RESTORE |
There is no Materialize RPC — persisting a SELECT is CTAS, CREATE OR REPLACE, or INSERT … SELECT.
See also
- Tables — API Reference —
CreateTable·AlterTable·DropTableand the SQL that replaced the old lifecycle RPCs dodil data table— data — query / insert / upsert / merge / update / delete-rowsdodil data table— maintenance — optimize / vacuum / compact- Core Concepts → Table shape —
TableSpec/ColumnDefand both creation modes