Skip to main content
Exports land in a container as Parquet, CSV or JSONL, usually partitioned by date. A blob trigger fires the incremental run, and the blob prefix doubles as a resumable watermark.

What you need

  • Read access to the container
  • An Octave workspace API key, from Settings → Integrations
  • An Azure subscription to deploy into

Where this runs

An Azure Function on a blob trigger covers the incremental run. Consumption-plan executions are time-bounded, so the backfill wants either Durable Functions or a Container Apps job.

The prompt

Copy this into Claude Code, Cursor or any coding agent. It carries the whole flow — reading your warehouse, mapping the columns, posting to Octave, and deploying the result. Fill in section 1 with your real schema and a few sample rows (read the Parquet schema off one blob with pyarrow.parquet.read_schema(), or head -5 a CSV or JSONL object). The more of your actual data it can see, the less it has to guess.
The instruction to show the mapping as a table and wait for confirmation is the part worth keeping. Without it an agent guesses at your column names and buries the guess inside a handler, where a wrong eventType looks exactly like a right one until the data is in.

Hints worth adding

These are the things that go wrong with Azure Blob Storage specifically. Paste whichever apply into section 1 of the prompt — an agent cannot infer them from a schema. SAS tokens expire mid-backfill. A multi-hour run will outlive a short-lived token and die partway with a 403. Ask for managed identity instead — it refreshes itself. Blob triggers can be slow to fire and can fire twice. Polling-based triggers are not instant, and delivery is at-least-once. A stable eventId makes the duplicate harmless; mention it so the AI does not build its own dedupe table. Paths behave differently depending on the namespace. With a hierarchical namespace the account has real directories; without it / is just a character in a flat name. Prefix listing works either way, directory operations do not.