Create & model

Create an empty table from a schema

Define typed columns, a primary key, and constraints, then create the Delta table.

Create a table by defining its columns up front. At least one column must be the primary key. The table is written as a Delta table at a location under a registered storage connection.

Create

The CLI takes a bare table name, a storage --location, and the schema as a JSON file (--schema-file):

eddytor create table orders \
  --location s3://your-bucket/master-data \
  --schema-file ./orders-schema.json \
  --description "Order master data"

orders-schema.json lists the columns (name, data_type, nullable, is_primary_key) and any constraints - the same shape as the MCP body. Add CHECK constraints later with eddytor create constraint.

{
  "table_name": "products",
  "location": "abfss://mdm@storage.dfs.core.windows.net/master-data",
  "description": "Product master data",
  "columns": [
    { "name": "product_id", "data_type": "Utf8", "nullable": false, "is_primary_key": true },
    { "name": "name",       "data_type": "Utf8",    "nullable": false },
    { "name": "price",      "data_type": "Decimal(20,4)", "nullable": true }
  ],
  "constraints": [{ "name": "price_positive", "expr": "price > 0" }]
}

The rules that bite

Heads up

table_name is bare (products) - never catalog.schema.products. location is a full storage URL - not a relative path. At least one column needs is_primary_key: true.
  • Pick types deliberately - see Column types & nullability.
  • CHECK constraints ({ name, expr }) are SQL expressions evaluated on every insert/merge - bad data never lands.
  • Column names are case-sensitive.

Partitioning

Heads up

Most master-data tables should NOT be partitioned. Partitioning a small table, or on a high-cardinality column (like an ID or timestamp), creates thousands of tiny files that make reads slower and force frequent compaction. It helps only on genuinely large tables that are almost always filtered on one low-cardinality column (region, year, tenant).

Verify

Confirm it landed and inspect the schema:

eddytor get tables
eddytor describe table eddytor sales orders

Demo table

Want to try the tools without bringing your own data? Seed a small, realistic demo_products table - typed columns, a primary key, and sample rows - into a storage connection:

eddytor create demo-table <config-id>
create_demo_table(config_id="…")

It's a normal table - drop it when you no longer need it.

Other ways to get a table

Have a CSV? Import it - Eddytor infers the schema and creates the table in one step.

On this page