dodil k3 table — lifecycle
Manage tables. Both creation modes (manual + pipeline-generated), plus list / get / describe / delete. Mirrors Tables — API Reference.
Persistent flag on the whole group: --bucket / -b (required).
dodil k3 table create
dodil k3 table create [name] -b BUCKET [flags]Creates a table — manual (default) or pipeline-generated via --source.
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--description | -d | string | — | Human-readable description |
--columns-json | — | string | — | JSON array of column descriptors. Required for --source manual. |
--partition-column | — | string list (repeat) | [] | Partition columns. Repeat for multi-column partitioning. |
--merge-key | — | string list (repeat) | [] | Primary-key columns (composite). Repeat for composite PK. Drives keyed routing for writes. |
--source | — | string | manual | Creation mode — manual or pipeline_generated |
--pipeline-template-id | — | string | — | Required when --source pipeline_generated. Pick a warehouse-compatible Scriptum template. |
Manual mode
Define columns explicitly; K3 creates the Delta table eagerly:
dodil k3 table create events --bucket kb-prod \
--description "Click + purchase events" \
--columns-json '[
{"name":"id", "type":"COLUMN_TYPE_LONG", "nullable":false},
{"name":"user_id", "type":"COLUMN_TYPE_STRING", "nullable":false},
{"name":"occurred_at", "type":"COLUMN_TYPE_TIMESTAMP", "nullable":false},
{"name":"event_type", "type":"COLUMN_TYPE_STRING", "nullable":false},
{"name":"payload", "type":"COLUMN_TYPE_JSON", "nullable":true}
]' \
--partition-column event_type \
--merge-key id --merge-key user_idColumn types (set by enum name): COLUMN_TYPE_STRING, COLUMN_TYPE_INT, COLUMN_TYPE_LONG, COLUMN_TYPE_SHORT, COLUMN_TYPE_FLOAT, COLUMN_TYPE_DOUBLE, COLUMN_TYPE_BOOLEAN, COLUMN_TYPE_DATE, COLUMN_TYPE_TIMESTAMP, COLUMN_TYPE_BINARY, COLUMN_TYPE_JSON. See SQL Compatibility → Column types.
Pipeline-generated mode
Pick a Scriptum analytics template; schema materializes lazily on first ingest. K3 also creates the bound pipeline + auto-generated ingest rule.
dodil k3 table create entities --bucket kb-prod \
--description "Auto-extracted entities + PII" \
--source pipeline_generated \
--pipeline-template-id entity_pii_extractionBrowse the catalog: dodil k3 template list (Pipelines CLI) or API Reference → Templates → The catalog.
Note: in pipeline mode,
--columns-json/--partition-column/--merge-keyare ignored — the template owns the schema. To set the auto-generated rule’s folder prefix, use the API (CreateTablePipeline.folder_prefix).
dodil k3 table list
dodil k3 table list -b BUCKETLists all tables in the bucket — name, source kind (MANUAL or PIPELINE_GENERATED), row counts, size.
dodil k3 table list --bucket kb-prod -o json \
| jq '.tables[] | {name, source, rowCount, sizeBytes}'Pagination (
page_size,page_token) exists on theListTablesAPI but isn’t surfaced as CLI flags.
dodil k3 table get
dodil k3 table get [name] -b BUCKETFetches one table’s metadata row.
dodil k3 table get events --bucket kb-prod -o jsondodil k3 table describe
dodil k3 table describe [name] -b BUCKETThe richest read on a single table — schema + Delta location + version + write-log backlog + drain-lag SLO + last-drain row classification. Mirrors DescribeTable.
dodil k3 table describe events --bucket kb-prod -o json \
| jq '{
version,
walObjectCount, walTotalBytes, drainLagSecs,
lastDrainInsertedRows, lastDrainUpdatedRows, lastDrainDeletedRows
}'Useful for:
- Confirming a
Compactran (walObjectCount→ 0,drainLagSecs→ 0) - Spot-checking post-drain row counts (
lastDrain*— the truthful insert/update/delete breakdown that pre-drainrows_writtencan’t surface) - Reading the authoritative
pkColumnsfor write-strategy routing decisions
dodil k3 table delete
dodil k3 table delete [name] -b BUCKETPermanently removes the table — Delta directory + sidecar. Does not cascade to pipeline-generated tables’ bound pipeline or auto-generated rule — clean those up separately via the Pipelines API.
dodil k3 table delete events --bucket kb-proddodil k3 table templates
dodil k3 table templates [--category CAT] [--search TEXT] [--label KEY=VALUE]Browse the warehouse-compatible subset of the Scriptum template catalog — the templates you can pass to dodil k3 table create --source pipeline_generated --pipeline-template-id <id>. Server-side filtered to warehouse_compatible: true.
The catalog is org-scoped (not bucket-scoped) — same warehouse-compatible set is returned regardless of which bucket you call from. The -b / --bucket flag is inherited from the dodil k3 table parent group and accepted but ignored by the server on this subcommand; you can omit it.
| Flag | Type | Description |
|---|---|---|
--category | string | Filter by category (e.g. analysis, vision) |
--search | string | Free-text match against name + description |
--label | string list (repeat) | Filter by label key=value. Repeat for multiple — all must match (AND). |
Examples:
# All warehouse-compatible templates
dodil k3 table templates
# Filter by category
dodil k3 table templates --category analysis
# Free-text search
dodil k3 table templates --search ocr
# Label filter — only PDF-accepting templates
dodil k3 table templates --label modality=pdf
# Compose — vision-category templates that accept video
dodil k3 table templates --category vision --label modality=videoThe catalog with one-line descriptions lives at API Reference → Templates.
dodil k3 template listvsdodil k3 table templates— same--category/--search/--labelflag shape on both. The top-leveldodil k3 template listreturns all templates across pillars; this Tables variant pre-filters to warehouse-compatible only. Both are org-scoped (no-bneeded).
Operations not in the CLI today
| Operation | Use the API |
|---|---|
AlterTable (ADD COLUMN) | PATCH /:bucket/tables/:name/schema |
ListPartitions | GET /:bucket/tables/:name/partitions |
Materialize (structured CTAS) | POST /:bucket/tables/:source_table/materialize |
Execute (raw SQL — DDL, CTAS, multi-shape writes) | POST /:bucket/tables/_execute |
table query is the CLI’s slice of Execute for read SQL — for everything else (DDL, CTAS, ALTER, DROP), use curl against /_execute.
See also
- Tables — API Reference — full Tables RPC surface
dodil k3 table— data — query / insert / merge / update / delete-rowsdodil k3 table— maintenance — optimize / vacuum / compactdodil k3 engine— engine lifecycle (auto-enabled — rarely needed)- Core Concepts → Table — type signature + both creation modes