Elizon Docs
Data Tables

Studio → Data Tables

Browsing, correcting, importing and exporting the rows your workflows wrote.

Studio → Data Tables is where a person looks at what the workflows have been writing — and fixes what they got wrong. It shows the tables of the active project, so switching project in the sidebar re-reads the page.

The list

Each table in the project, with:

  • its name,
  • its columns, as a summary of names and types,
  • how many rows it holds,
  • when it was last updated,
  • and a badge naming the Package that installed it, when one did.

From here you can create a table (name it, then add the columns in order, each with its type), rename one, and delete one — deleting takes every row with it and cannot be undone.

ActionNeeds
See the listdata_tables.view
Create a tabledata_tables.create
Rename a tabledata_tables.edit
Delete a tabledata_tables.delete

A control you lack the permission for is disabled and says which permission it wants, rather than failing when clicked.

The grid

Opening a table shows its rows in the table's own column order, 50 to a page (25, 50 or 100 are offered), with a summary under them that reads Showing 1–50 of 312 · page 1 of 7.

Editing

  • Add a row inline. Each column gets the control its type deserves: a checkbox for a Boolean, a date picker for a Date, a number field for a Number.
  • Edit a cell by clicking it, then Enter to save. The patch touches only that column — a workflow run that wrote another column of the same row between your read and your save is not reverted.
  • Delete a row inline.
  • Delete or set many rows at once. Tick rows (the header box ticks the whole page) and a bar appears with Delete selected and Set column…. Both ask for confirmation first, and the confirmation states how many rows it will touch. When the page is ticked and the table or filter holds more rows than the page, Select all 312 matching extends the selection to every matching row, on other pages too — including the quick search. With no filter and no search that is the whole table, and the bar says "all 312 rows". The count you confirmed is sent with the request: if rows changed in the meantime (a workflow run, a colleague), nothing is written and you are told both numbers. A value that does not fit the column's type, or a row that would grow past the size limit, refuses the whole action — never part of it. Up to 1,000 ticked rows per action; changing the filter, search, sort or page clears the selection.
  • Add or remove a column from the columns dialog. Adding one leaves existing rows untouched; removing one strips its key from every row, immediately.
  • Rename a column from the columns dialog. The column keeps its type, its position and every value: each row that held a value under the old name holds it under the new one. Changing only the case (amount → Amount) is allowed; a name another column already has, a system field name (id, createdAt, updatedAt), an empty name and one over 128 characters are refused.

Editing a cell needs data_tables.edit, and so do bulk delete and set, and adding, renaming or removing a column. A write that the server refuses — a value the column's type cannot hold, a limit crossed — is shown as an error on the page; it is never silently dropped.

An edit here is the same store a workflow reads. The next run's Get row(s) sees exactly what you typed, which is the point of correcting a row by hand rather than re-running an extraction.

Renaming a column: what does not follow

Workflows and Agents refer to a column by its name. Before you confirm a rename, the dialog lists the workflows (and their Data Table nodes) and the Agent tool settings that name the column. The rename does not change any of them — open each one afterwards and pick the new name. Until you do, a Data Table node that names the old column in a condition, a mapped value or a key column is refused at run time with an error naming the column. Under automatic mapping, an incoming field with the old name is not an error: it is ignored, and listed in the node's ignoredFields.

The list covers Data Table nodes bound to this table and Agent tool settings. It does not cover an expression in a later node that reads a row field by name — {{ upstream.<node id>.output.result.rows.0.Amount }} keeps reading Amount, which no longer exists, so check the nodes downstream of each listed one.

Sorting and filtering

Click a column heading to sort by it, again to reverse it.

The filter bar builds the same column · operator · value rows a Data Table node does, with the same operators and the same Any / All switch — so a filter you tried here means exactly the same thing when you type it into a node.

The Search rows box above the filter bar matches rows where any text column contains what you typed, ignoring case. Press Enter to apply it; clearing the box removes it. It is combined with the filter and the sort (both must hold), and %, _ and \ in it match themselves.

Export

Up to two buttons, and the difference matters:

ButtonExportsShown
Export CSVThe whole table, ignoring the filter on screenAlways
Export viewOnly the rows the current filter matchesOnly while a filter is on it

The file is named after the table (contract-deadlines.csv, or contract-deadlines-filtered.csv), and the first row is the column names. Export view carries the filter, the search box and the sort you have on screen, and writes the rows in that order.

Every matching row is in the file, however many there are. The one limit is the file size, 50 MB (DATA_TABLES_MAX_SOURCE_FILE_BYTES): a bigger export is refused with a message saying so, never cut short, and you filter the view down to export it in parts.

Data only (next to the buttons, on by default) leaves out the id, createdAt and updatedAt columns, so the file can be imported straight back with Import and every row reads as unchanged. Untick it to get those three columns as well.

The file opens in Excel as it is (UTF-8 with a byte-order mark, one \r\n per row). A text value that starts with =, +, - or @ is written with a leading tab so a spreadsheet shows it as text instead of running it as a formula.

Import

Import (next to Export, for anyone who can edit the table) adds rows from a file instead of typing them one by one. It takes:

  • CSV — UTF-8 with or without a byte-order mark, or Windows-1252 (what Excel on Windows writes); ,, ; or tab as the delimiter, read from the header row; quoted values may hold the delimiter, quotes ("") and line breaks. The first row must name the columns.
  • JSON — an array of objects, or JSONL, one object per line. The same files a workflow's Data Table node reads.

An .xlsx workbook is refused: export the sheet as CSV from the spreadsheet and import that. One import carries at most 20,000 rows and 50 MB (DATA_TABLES_MAX_ROWS_PER_WRITE and DATA_TABLES_MAX_SOURCE_FILE_BYTES); a bigger file is refused before it is read, so split it.

The dialog then works in three steps, and nothing is written until the last one:

  1. Map the columns. Each file column is matched to a table column by name, ignoring case and surrounding spaces. Change any match, ignore a column, or create a new column for it (its type is proposed from the values). The id, createdAt and updatedAt columns an export writes are ignored unless you map them.
  2. Check the formats. The number format (1234.50, 1,234.50, 1.234,50 or 1 234,50) and the date format (ISO, DD/MM/YYYY, MM/DD/YYYY or DD.MM.YYYY) are detected from the first 100 rows and shown, so you can change them. A date like 03/04/2026 reads both ways: when every date in the file is like that, the dialog asks you to choose rather than guessing.
  3. Preview. Every cell that cannot be stored is listed with its row, column, the type the column expects and the value in the file (the first 100, with the total), and the import cannot go ahead until there are none. Otherwise the preview shows how many rows would be inserted, updated and left unchanged.

Choose how rows are written before you preview: add every row as a new row, or update rows that match on a key — one or more columns that identify a row, such as an invoice number — and add the rest. An update that would change nothing counts as unchanged and leaves the row as it was. A file that lists the same key twice is refused.

The import is all or nothing: if any row is refused, or the table would pass its row limit, no row is written and no new column is created, and the dialog says why. While it runs, workflows that bulk-upsert into the same table wait for it.

Tables a Package installed

A table that arrived with a Package is an ordinary table with a badge. You can read it, write it, add columns and export it like any other. What the Package declared only decides what happens to it on uninstall — with one exception: you cannot rename a column of it while the Package is installed, because the Package's workflows and its updates address the columns by the names it declared. Uninstall the Package (keeping the table) and the table is yours to rename.