A list of steps applied to every row, top to bottom, before any filtering happens. Each step writes a top-level field. Dotted paths like 'address.city' can be read by copy, addField placeholders, compute, default, coalesce, replace, split, joinArray, substring, round, dateFormat, dateDiff, extractDomain, mapValues, hash, parseJson and length; rename, drop, keep, cast, trim, uppercase, lowercase and regexExtract only work on top-level fields, so copy a nested value to a top-level field first. Steps (26): rename {from,to}; drop {fields}; keep {fields} (drop everything else); copy {from,to}; setField {field,value}; default {field,value} (fill blanks); addField {field,template} ({{a}} {{b.c}} placeholders); compute {field,expression,round} (arithmetic + - * / over numeric fields); cast {field,to: number|string|boolean}; trim / uppercase / lowercase {field}; replace {field,search,replacement,regex,into}; regexExtract {field,pattern,group,into}; split {field,separator,index,into}; joinArray {field,separator}; substring {field,start,length,into}; round {field,decimals}; coalesce {fields,into} (first non-blank); dateFormat {field,format: iso|date|unix|unixMs|'DD/MM/YYYY',into}; dateDiff {from,to (a field or 'now'),unit: days|hours|minutes|seconds,into}; extractDomain {field,into} (from an email or URL); mapValues {field,map,default,into} (look up values in a {from: to} table); hash {fields,algorithm,into} (a stable id for dedupe); parseJson {field}; length {field,into}.