Refreshing, appending and combining data
Quick ML: machine learning on your iPhone and iPad
5 min read
Published Sep 6 2026
Guide Sections
Guide Comments
Data rarely stays still. This chapter covers what happens after the first import: pulling fresh rows from a live source, stacking another file underneath, pulling in columns from a lookup table, and joining two projects together.
The Data Source screen
On the Data screen, the Data Source section shows where the data came from and when it was last refreshed. Tap the row to open the settings. Files and the sample data cannot refresh, because there is nothing to fetch. Web, Kaggle, PostgreSQL and combined-project sources can.
The four refresh modes
The On refresh picker decides what a refresh does.
Mode | What it does | Best for |
Replace All | Downloads everything again and rebuilds through your recipe | A source whose columns never change shape |
Append New | Fetches only what changed and adds it as a recipe step | Data that only grows, like a log |
Merge on Key | Fetches the changes, replacing rows whose key already exists | Data that changes in place, like orders with a status |
Keep History | Fetches the whole thing every time and keeps every copy, stamped with the time | A page that only ever shows the present |
Append New and Merge on Key work best with a source that can filter by date, using the {last_sync} placeholder described in the previous chapters. Merge on Key needs you to pick the key column, and it never deletes rows: a row that vanished at the source stays in your data until you do a Replace All.
Keep History, or turning a snapshot into a time series
Keep History is my favourite of the four. Plenty of pages only ever show today's table: a league standing, a price list, a leaderboard. There is no way to ask them what changed. Keep History fetches the whole table on every refresh and appends it underneath the copies already collected, stamping every row in a date column called snapshot_time with the moment the refresh started.
After a few refreshes you have a time series where before you had a snapshot. That stamped column feeds the date parts, lag and rolling columns in chapter 7, the Time Series dashboard tile, and the time-ordered split that turns on the Forecast chart in the last chapter.
An unchanged page is still collected again, on purpose. A reading is a reading, and skipping the duplicates would put holes in an evenly spaced series. If your rows carry ids and you only want the changes, Merge on Key is the better choice.
Refreshing in the background
Append New, Merge on Key and Keep History offer a Refresh in background toggle. iOS grants apps short windows of background time when it feels like it, so this is a bonus rather than a schedule. Replace All is deliberately left out, because a full rebuild does not fit in a thirty-second window. There is also a Retrain models after refresh toggle if you want the models to keep up.
Appending another file
Back on the Data screen, Append Another File stacks the rows of a second file underneath the first, matching columns by name. It is the natural move for a train.csv and test.csv pair, or for monthly exports. The file is stored beside the original so every one of your devices replays the same append.
Adding lookup columns
Add Lookup Columns is a left join in plain clothes. Pick a file, choose which column in your data matches which column in the file, and tick the columns you want to pull in. Rows without a match keep the new columns empty.
The sheet also offers Summary Columns: the number of matching rows, or the sum, average, minimum or maximum of one of the lookup file's columns across every match. A Flexible key matching option ignores case and stray spaces and treats 7, 7.0 and 007 as the same key, which is the kind of thing that saves an afternoon.
The preview shows the real match count before you commit. Both append and lookup are Pro features, and both land in the recipe like any other step.
Combining two projects
Combine Two Projects is free, and it only appears on a project that has no data yet. Create an empty project, tap Data, tap Combine Two Projects, and pick two existing projects and a key column in each.
The Keep control offers Matching Only, Keep All Left and Keep All Right, which are an inner join and the two outer joins. Columns whose names clash gain the project's name, the way pandas adds _x and _y. The row count in the preview is the real join, run over both datasets, so what you see is what Import produces.
If your keys repeat on both sides, the preview warns you that the join will multiply rows. It is worth reading that warning. The combined project is refreshable, refreshing each parent that can refresh and re-running the join, and it can be combined again with a third project.
Rebuild From Source
One last button on the Data Source screen is Rebuild From Source. It replays your recipe on the original file from the first step. You should rarely need it, but if the table ever looks out of step with its recipe, this is the reset.