Skip to content

Datasets

Upload files or sync sources into managed Delta Lake storage, query them with SQL, edit rows with typed DML, and restore any previous version.

A dataset is the unit everything else in AZ-Five works on. Upload a file, import from a connector, save a query’s result, or point an event or log stream at the platform — each lands as a dataset in managed Delta Lake storage: an open, versioned columnar format, so every change is a recorded version and any version can be restored or exported.

Upload a file

Datasets accept three file formats: CSV, Parquet, and JSON. Upload from the Datasets page in the app.

Upload is asynchronous: the file is staged to object storage and processed by a worker. The dataset appears in the grid right away and flips to ready when processing lands — schema inferred, profile computed, preview available. Storage quota is checked before the file streams, so an over-quota upload fails fast rather than after the transfer.

Datasets grid with status, size and freshness columns

Query with SQL

Every dataset is queryable with SQL in the app’s SQL editor. Reference the table as dataset:

SELECT customer_id, SUM(amount) AS revenue
FROM dataset
WHERE status = 'completed'
GROUP BY customer_id
ORDER BY revenue DESC

Reads are SELECT-only — exactly one statement, SELECT or UNION; anything else is rejected before it reaches the engine. Multi-dataset joins are supported too: each dataset gets a name you reference in the SQL.

Interactive results are capped at 10,000 rows, and a truncated result is flagged as such — always check the flag, because summing a silently truncated result gives wrong numbers. Need more than 10k rows? Use the async export, which runs the query in the background and produces a downloadable file with no row cap.

SQL editor with results grid

Edit rows with SQL

Datasets are not read-only. The SQL editor accepts three DML forms:

INSERT INTO dataset SELECT * FROM staging_rows;
DELETE FROM dataset WHERE status = 'cancelled';
MERGE INTO dataset USING updates ON dataset.id = updates.id
  WHEN MATCHED THEN UPDATE SET amount = updates.amount
  WHEN NOT MATCHED THEN INSERT *;

The statement is parsed into a typed operation — insert, upsert, or delete — never executed as raw SQL. The write half runs as a native Delta operation; any SELECT source inside it goes through the normal read path with all its guards. Every mutation reports what happened: the rows inserted, updated, and deleted, and the new dataset version.

Versions, history, restore

Every write — upload, append, transform, mutation — produces a new dataset version. The dataset’s History view lists them with what changed, and restoring brings any previous version back as the current one. Mistakes are undoable by design: a bad DELETE is one restore away.

Version numbers also drive caching — previews and query results are cached per version, so repeated reads of an unchanged dataset are fast, and any write invalidates by construction.

Keep data fresh

A dataset from a connector can refresh on a schedule or stay live. Scheduled refresh re-syncs on a cron cadence and bumps the version. Live mode re-syncs on read (with a short cooldown) and is never cached — every query sees the source’s current state. Watermark-based connectors sync incrementally; resetting the watermark from the dataset’s sync settings forces the next sync to start over.

Reference

Upload

Formats.csv, .parquet, .json
BehaviorProcessing is asynchronous — the dataset appears immediately and flips to ready
StorageManaged Delta Lake — open format, versioned, exportable

Query limits

LimitValue
Interactive result cap10,000 rows, flagged as truncated when hit
Larger resultsAsync export (no row cap)
Statements per queryExactly one; SELECT/UNION only on read paths
Mutation SQL length50,000 characters

Programmatic ingestion — events and logs — authenticates with API keys; see Product analytics and Log ingestion.