Operations guide
You know what is wrong with your data, or what you want from it, but not what the step is called. Find your problem here, work out which version of it you have, and follow it to the operations that answer it.
How operations are arranged
We arrange operations by the stages a dataset passes through on its way from a source to a result. There are five, in the order a pipeline meets them:
- Acquire: reading the data in, from files, databases and the web.
- Shape: cleaning, inspecting and rearranging one table.
- Join: bringing two or more tables together.
- Model: analysing the data or learning from it.
- Publish: sending the result out, as a file, a table or a message.
Control sits outside the five. Its operations run the pipeline around the data: they order and repeat steps, handle errors, set parameters, run scripts and commands, test the pipeline and log what happened, rather than changing the data.
Within a stage, we group operations by the shape of what you get back, compared with the table you started from:
- A new table, from no input table.
- One row out per row in, with columns added or changed.
- Fewer rows, same columns.
- More rows, each traceable to one input row.
- A new grain: each row stands for a group of input rows.
- The same cells, rearranged.
- One table from two or more.
- A table describing the input rather than holding its rows.
- A model or a file, not a table.
- A model or file and a table in, the table out with columns added.
- The table sent out, with nothing new to look at.
Once you can say which stage you are in and what shape you want back, the operation follows. Say you want the repeated rows of a table gone: you are shaping one table, and you want fewer rows back with the same columns. That leaves a handful of operations, and Deduplicate rows is the one.
Start from your problem
Each problem below comes in more than one version. Find the sentence that is true of your data, and follow it to the operations that answer it, in the order you would run them.
My customer list has the same company three times.
Repeated companies are at least three problems, and each needs a different fix.
The three rows match exactly, cell for cell, or on the key you care about.
The rows are one company whose name is spelt differently, such as Acme Ltd and ACME Limited, and otherwise agree.
The records describe one company in different ways, with no shared key and different details in each.
I've been sent a file and need it as a table.
Which reader you need depends on how the file lays out its values.
It is text with a separator between the fields, such as a comma, a tab or a pipe.
It is text whose columns sit at fixed character positions, with nothing between them.
It is a workbook from a spreadsheet program, such as an .xlsx file.
It is a .zip, .tar or .gz file with the data inside it.
I don't know what's in this file, or whether to trust it.
Before you change anything, you can ask what the file holds, and then whether it holds what it should.
You don't yet know its columns or what type each one is.
You know the columns, but not how many values are blank or distinct in each.
You know what the data should look like and want each rule checked, such as no blank customer IDs.
My dates won't sort or filter as dates.
The column holds dates in a form the table treats as something else, and the form tells you the fix.
The dates are text, such as 03/11/2026, and you know how they are written.
The values are large whole numbers, such as 1762128000, counting the time since 1 January 1970.
Every column came in as text, dates among them, and you want each set to the type its values fit.
My table is the wrong way round for what I need.
The cells are all there; what changes is whether months, or any repeated category, run across the columns or down the rows.
You have a column for each month and want one row for each month, with the month as a value.
You have a row for each month and want a column for each month, as in a cross-tab.
You want the rows and columns swapped wholesale, each row becoming a column.
My two tables should join, but the keys don't match.
Keys fail to match for different reasons, and each reason has its own kind of join.
The keys are the same values written differently, with stray spaces or different capitals.
The keys are close but not equal, such as slightly different spellings of a name.
One side holds a range, such as a price's start and end dates, and the other a value that falls inside it.
You want each row matched to the latest row of the other table at or before its time, such as a trade and the rate in force.
I need to know what changed between last month's file and this month's.
You may need a yes or no, every difference, or only the rows that came or went.
You only need to know whether the two files hold the same data.
You want every difference listed, cell by cell or column by column.
You want the rows whose key is in one file and not the other.
I need to write this month's results into a table that holds the earlier months.
Writing into a table that already has rows means deciding what happens to the rows already there.
Some of the rows are already in the table and should be updated, and the rest are new.
The new rows cover whole months, which should replace those months in the table.
You must keep the old version of each changed row as well as the new one.
The table should hold only the latest result, with the earlier months gone.
I want to put my customers into groups.
Whether the groups are already in your data decides whether you summarise or model.
The groups are already a column, such as region or plan, and you want figures for each.
There is no such column, and you want customers who are alike put together.
I want to know what next month's numbers will look like.
A forecast reads a series of periods, so what matters first is whether your rows already are one.
You have one row for each period, such as each week's sales, with none missing.
You have one row for each period, but some periods are missing.
Your rows are individual events, such as orders, with a time on each.
I need to hand the result to someone else.
The right file depends on what they will open it with.
They will open it in a spreadsheet program.
Any tool should be able to read it, and plain text is enough.
They will read it with another data tool, and the column types should arrive intact.
Others need to know what my dataset holds and where it came from.
Where the description goes depends on where they will look for it.
They will read a file beside the data, such as a data dictionary or a schema.
They look datasets up in a data catalogue service your organisation runs.
They need to know which pipelines read and write each table.
Every operation
The 149 operations with a page, by stage and then by the shape of the result, each with its status in arcform today.
Acquire
A new table, from no input table
Unpack an archiveNot built yet
Decompress or unpack zip, tar, gzip (1 variant with a page)
Read from a databaseRuns as a SQL step
Read from a relational or NoSQL database, warehouse or lake (3 variants with a page)
Read a file of any formatRuns as a SQL step
One reader that picks the format from the file
Read a columnar fileRuns as a SQL step
Read Parquet, ORC, Avro, Arrow, Iceberg, Delta (5 variants with a page)
Read a CSV or delimited fileRuns as a SQL step
Read CSV, TSV, fixed-width, other delimited text (4 variants with a page)
Read a JSON fileRuns as a SQL step
Read JSON, NDJSON (3 variants with a page)
Read another file formatNot built yet
Read any other file format (SAS, SPSS, Stata, PDF, YAML, logs) (11 variants with a page)
Read a spreadsheetRuns as a SQL step
Read Excel, ODS, Google Sheets (2 variants with a page)
Read an XML or HTML fileRuns as a SQL step
Read XML, HTML tables (1 variant with a page)
List files and foldersRuns as a SQL step
List directories, file metadata, file exists (4 variants with a page)
Generate rowsRuns as a SQL step
Generate rows: sequences, date ranges, constants, typed-in data (5 variants with a page)
Fetch from the webNot built yet
HTTP GET or POST, REST, SOAP, GraphQL, web scraping (6 variants with a page)
Paste in a tableNot built yet
Take a table from memory or the clipboard
Fetch from cloud storageNot built yet
List or fetch from S3, GCS, Azure Blob, HDFS, FTP, SFTP (1 variant with a page)
Read from an application's APINot built yet
Read from a SaaS application API
Shape
One row out per row in, with columns added or changed
Group values into binsRuns as a SQL step
Discretise, bucket, tile, histogram bins (2 variants with a page)
Convert binary and encoded textRuns as a SQL step
Base64, hex, blob and character-set conversion
Make a column from examplesNot built yet
Derive a column from typed examples of the output
Change a column's typeRuns as a SQL step
Change data type, detect type, set metadata or role (2 variants with a page)
Merge near-duplicate valuesRuns as a SQL step
Cluster near-duplicate values within one column and merge them (2 variants with a page)
Add a column by conditionRuns as a SQL step
If, case or switch expression to a column
Add a calculated columnRuns as a SQL step
New column from a formula or expression (5 variants with a page)
Encode categories as numbersRuns as a SQL step
One-hot, dummy, label or ordinal encoding (3 variants with a page)
Hash or mask a columnRuns as a SQL step
Hash, checksum, mask, encrypt, anonymise (4 variants with a page)
Promote a row to headersRuns as a SQL step
Promote a row to headers, or demote headers to a row (1 variant with a page)
Compare and combine conditionsRuns as a SQL step
Comparison and boolean expressions
Apply a maths functionRuns as a SQL step
Numeric functions: arithmetic, rounding, trigonometry (4 variants with a page)
Combine columns into oneRuns as a SQL step
Concatenate several columns into one
Fill in missing valuesRuns as a SQL step
Replace, coalesce, impute or flag missing values (4 variants with a page)
Parse a date or timeRuns as a SQL step
Parse, format or decompose dates and times; date arithmetic; time zones (8 variants with a page)
Parse nested valuesRuns as a SQL step
Parse or build JSON, XML, URL, key-value, nested structs and lists (9 variants with a page)
Replace valuesRuns as a SQL step
Replace or map values, find and replace, value mapper (2 variants with a page)
Match with a regular expressionRuns as a SQL step
Regex extract, match, replace (2 variants with a page)
Rescale a number columnRuns as a SQL step
Normalise, standardise, z-score, min-max, log transform
Fit columns to a layoutRuns as a SQL step
Fit columns to a target layout
Choose and rename columnsRuns as a SQL step
Keep, drop, reorder or rename columns (5 variants with a page)
Split a columnRuns as a SQL step
Split one column into several by delimiter, position or pattern (2 variants with a page)
Standardise addresses, names and phone numbersRuns as a SQL step
Parse and standardise addresses, names, phone numbers
Clean up textRuns as a SQL step
String functions: trim, case, pad, substring, remove characters, normalise whitespace or unicode (8 variants with a page)
Browse rowsA feature, not a step
View, preview or browse rows
Edit cells by handRuns as a SQL step
Change individual cells by hand, insert or delete specific rows (1 variant with a page)
Fill down or upRuns as a SQL step
Fill down or up across rows, and the inverse, blank down
Number or rank rowsRuns as a SQL step
Row number, record id, rank, dense rank, ntile (5 variants with a page)
Mark rowsNot built yet
Mark rows without removing them: select, flag, star
Sort rowsRuns as a SQL step
Order rows
Run a SQL queryRuns as a SQL step
Run a SQL query over the table
Calculate across rowsRuns as a SQL step
Running total, lag, lead, moving average, multi-row formula (6 variants with a page)
Fewer rows, same columns
Deduplicate rowsRuns as a SQL step
Distinct rows, unique by key, keep first or last per key (3 variants with a page)
Filter rowsRuns as a SQL step
Keep or drop rows by a condition (5 variants with a page)
Take the first or last rowsRuns as a SQL step
First N, last N, top N, row range, skip rows (3 variants with a page)
Sample rowsRuns as a SQL step
Random or stratified sample, train and test split (3 variants with a page)
Split a tableRuns as a SQL step
Split one table into several by a key or a condition
More rows, each traceable to one input row
Split a list into rowsRuns as a SQL step
One row to many: unnest, explode, split to rows (2 variants with a page)
A new grain: each row stands for a group of input rows
Summarise by groupRuns as a SQL step
Group by and summarise (4 variants with a page)
Count valuesRuns as a SQL step
Frequency table, value counts, count by
Gather rows into columnsRuns as a SQL step
Flatten a row group into columns, or spread columns back to rows
Add subtotalsRuns as a SQL step
Rollup, cube, grouping sets, subtotals
The same cells, rearranged
Pivot a tableRuns as a SQL step
Rows to columns, cross-tab
Transpose a tableRuns as a SQL step
Swap rows and columns
Unpivot a tableRuns as a SQL step
Columns to rows, melt
A table describing the input rather than holding its rows
Chart the dataA feature, not a step
Plot the data for exploration (2 variants with a page)
Measure correlationRuns as a SQL step
Correlation or association matrix, contingency table (2 variants with a page)
See a column's distributionRuns as a SQL step
Histogram, quantiles of one column
Profile a tableRuns as a SQL step
Summary statistics, distinct counts, null counts
List columns and typesRuns as a SQL step
List columns, types, metadata (3 variants with a page)
Check data qualityRuns as a SQL step
Data-quality rule, assertion, test, constraint or schema check (8 variants with a page)
Join
One row out per row in, with columns added or changed
Group matched recordsRuns as a SQL step
Turn matched pairs into one group id per record, following matches transitively
A new grain: each row stands for a group of input rows
Pick a surviving recordRuns as a SQL step
Collapse each group of matched records into one surviving record by per-field rules
One table from two or more
Cross join tablesRuns as a SQL step
Cross join, cartesian product
Compare two tablesRuns as a SQL step
Compare two tables, report changed, added and removed rows (2 variants with a page)
Join on approximate matchesRuns as a SQL step
Approximate string match join (1 variant with a page)
Join tables on a keyRuns as a SQL step
Inner, left, right, full join on equal keys (4 variants with a page)
Look up values from a reference tableRuns as a SQL step
Enrich from a reference table (1 variant with a page)
Merge into a tableRuns as a SQL step
Merge into a target, upsert, slowly changing dimension (6 variants with a page)
Put tables side by sideRuns as a SQL step
Put tables side by side, row by row
Join on a range or nearest timeRuns as a SQL step
Inequality, interval, as-of, nearest-in-time join (1 variant with a page)
Resolve entitiesNot built yet
Entity resolution with a trained or probabilistic matching model; reconciliation against an entity service
Keep rows found in another tableRuns as a SQL step
Keep or drop rows by existence in another table (2 variants with a page)
Intersect or subtract tablesRuns as a SQL step
Intersect, except (2 variants with a page)
Join by locationRuns as a SQL step
Join on spatial relationship, distance, containment (1 variant with a page)
Append tablesRuns as a SQL step
Append tables by rows (3 variants with a page)
Model
One row out per row in, with columns added or changed
Find outliersRuns as a SQL step
Outlier or anomaly detection
Cluster rowsNot built yet
K-means, hierarchical, DBSCAN, other clustering of rows (1 variant with a page)
Build features for a modelRuns as a SQL step
Generate features or row weights for a model
Work with geographyRuns as a SQL step
Geocode, spatial operations on geometry, grid cells, routing (7 variants with a page)
Reduce dimensionsNot built yet
PCA, SVD, UMAP, t-SNE, other dimensionality reduction
Classify textNot built yet
Classify text into categories
Embed text as vectorsRuns as a SQL step
Text or image to vector
Extract meaning from textNot built yet
Sentiment, named entities, topics, language detection (2 variants with a page)
Ask a language modelNot built yet
Call a large language model (2 variants with a page)
Read text and objects in imagesNot built yet
Image transformation, recognition, OCR, barcodes (1 variant with a page)
Fewer rows, same columns
Search text by relevanceRuns as a SQL step
Full-text search ranked by relevance
More rows, each traceable to one input row
Split text into wordsRuns as a SQL step
Tokenise, stem, n-grams, stop words, TF-IDF (4 variants with a page)
Forecast a time seriesNot built yet
ARIMA, ETS, other forecasting
A new grain: each row stands for a group of input rows
Find items that occur togetherRuns as a SQL step
Association rules, frequent itemsets, market basket
Analyse a networkRuns as a SQL step
Network or graph analysis (1 variant with a page)
Resample a time seriesRuns as a SQL step
Resample, decompose, difference, smooth, fill time gaps (3 variants with a page)
One table from two or more
Find similar rowsRuns as a SQL step
Row-to-row distance, nearest-neighbour search, vector search (2 variants with a page)
A table describing the input rather than holding its rows
Evaluate a modelRuns as a SQL step
Performance metrics, confusion matrix, ROC, lift, cross-validation (3 variants with a page)
Explain a modelNot built yet
Variable importance, partial dependence, SHAP, model inspection (3 variants with a page)
Optimise a planNot built yet
Linear programming, simulation, prescriptive optimisation
Use a probability distributionNot built yet
Distribution functions, density estimation (1 variant with a page)
Fit a regressionRuns as a SQL step
Linear, logistic or generalised linear regression as statistics (1 variant with a page)
Run a hypothesis testNot built yet
Hypothesis test, ANOVA, chi-square, t-test (1 variant with a page)
A model or a file, not a table
Calibrate a model's confidenceNot built yet
Rescale a model's confidences
Save or load a modelNot built yet
Store, load, export or import a trained model
Recommend itemsNot built yet
Collaborative filtering, matrix completion
Model a sequenceNot built yet
Hidden Markov and other sequence models, reinforcement learning
Model time to an eventNot built yet
Time-to-event models
Combine modelsNot built yet
Bagging, boosting, stacking, voting, a choice of learners, AutoML (1 variant with a page)
Train a linear modelNot built yet
Linear models, SVM, naive Bayes trained as a predictor (2 variants with a page)
Train a neural networkNot built yet
Neural network, deep learning
Learn rules from dataNot built yet
Rule induction, subgroup discovery
Train a tree modelNot built yet
Decision tree, random forest, gradient boosted trees (2 variants with a page)
Tune a modelNot built yet
Hyperparameter search, feature selection, feature weighting (2 variants with a page)
A model or file and a table in, the table out with columns added
Score with a modelNot built yet
Score or predict with a trained model (1 variant with a page)
Classify by nearest neighboursRuns as a SQL step
K-nearest neighbours
Not a data operation
Assemble a modelling pipelineA feature, not a step
Group models, assemble a modelling pipeline
Publish
The table sent out, with nothing new to look at
Write into an archiveNot built yet
Write into a zip or other archive
Write to a databaseNot built yet
Write or bulk load to a database, warehouse or lake (5 variants with a page)
Describe a datasetNot built yet
Emit metadata: data dictionary, schema file, lineage, data package descriptor (2 variants with a page)
Write a file of any formatRuns as a SQL step
One writer that picks the format from the file name
Write a columnar fileNot built yet
Write Parquet, ORC, Avro, Iceberg, Delta (5 variants with a page)
Write a CSV or delimited fileRuns as a SQL step
Write CSV, TSV, fixed-width
Write a JSON fileRuns as a SQL step
Write JSON, NDJSON
Write another file formatNot built yet
Write any other file format (7 variants with a page)
Write a spreadsheetRuns as a SQL step
Write Excel, Google Sheets (1 variant with a page)
Write an XML or HTML fileRuns as a SQL step
Write XML, HTML
Send to a web endpointNot built yet
Send results to an HTTP endpoint or webhook (1 variant with a page)
Copy a table outNot built yet
Hand the table to memory or the clipboard
Send a notificationA feature, not a step
Email, chat message, alert (1 variant with a page)
Upload to cloud storageNot built yet
Put to S3, GCS, Azure Blob, HDFS, FTP, SFTP (1 variant with a page)
Make a reportA feature, not a step
Render a report, document, dashboard, chart or map (2 variants with a page)
Write to an application's APINot built yet
Write to a SaaS application API (2 variants with a page)
Send to a stream or queueNot built yet
Produce to a queue or stream (1 variant with a page)
Control
Not a data operation
Create or change tablesRuns as a SQL step
Create, alter or maintain tables and indexes (2 variants with a page)
Plan and run queriesA feature, not a step
Query planning, optimisation, memory, caching, partitioning, parallelism (2 variants with a page)
Handle errors and retriesA feature, not a step
Error handling, retry, abort, dead-letter routing (2 variants with a page)
Run an external commandA feature, not a step
Run an external job or process, trigger another pipeline, version control (6 variants with a page)
Branch or loopNot built yet
Branch, loop, iterate, conditional execution, wait (10 variants with a page)
Undo and restoreA feature, not a step
Undo, redo, snapshot, freeze, replay a recorded path
Run a step inside a databaseNot built yet
Push a step down into a database rather than the tool's own engine
Build an app interfaceNot built yet
User-interface widgets for building apps on a workflow
Log and annotate a runA feature, not a step
Logging, audit, metrics, annotations, comments (3 variants with a page)
Set parametersA feature, not a step
Variables, parameters, context, configuration (8 variants with a page)
Check before runningA feature, not a step
Check that a service, file or connection is available before running
Run a scriptA feature, not a step
Run user code: Python, R, JavaScript, Java, shell (6 variants with a page)
Call a reusable workflowNot built yet
Call a sub-workflow, macro, mapping or reusable fragment (4 variants with a page)
Test a pipelineNot built yet
Unit-test a pipeline against expected output