Hydra ETL
Build your first job
Lesson 5 of 14 · Add a source

Create a job, then give it a source

A job is four manifests in a folder. Studio writes them for you — and the first one you fill in is the source.

Sourcesabout 20 minutespalette understood

1. Objective

Goal

Create a job from the canvas, learn what that gesture writes on disk, then place a source in it and configure it. Along the way, tell archive from delete before you need the difference.

Course project

Keep one cumulative Studio project named studio-course, one manual workflow named first-workflow, and one job named first-job. Each lesson builds on the state saved by the previous one.

What a job is

A job is not a file — it is a folder holding four manifests, and it is only complete when all four exist.

ManifestAnswers
sources.yamlWhere does the data come from?
transformations.yamlWhat happens to it along the way?
destinations.yamlWhere does it go?
pipeline.yamlWhich source feeds which destination?

You can write those four by hand, and hdrctl will run them. Studio offers the other route: you design on a canvas and it writes the same four files. Neither is more legitimate — they produce the same folder.

Prerequisites

  • Hydra API started with hdrctl serve.
  • Studio started from Hydra/studio with npm run dev.
  • A workflow open in the editor.

2. Steps

01Create a job

Objective

Add a job to the project without leaving the canvas.

Actions

  1. Open the Jobs configuration tab.
  2. Find the + button at the bottom left of the scene.
  3. Select it, and name the job.
Jobs configuration → +

The button sits in the tab bar, under the palette. One press creates the folder and its four manifests, then opens an empty canvas for it. Nothing else is required — a job with no node is a valid, if idle, job.

What you should see

A new tab beside the existing ones, already selected, and an empty canvas beside the source palette.

jobs/<name>/
  sources.yaml
  transformations.yaml
  destinations.yaml
  pipeline.yaml
The Jobs configuration scene with the source palette on the left and the plus button highlighted in red at the bottom left of the tab bar.
The + is easy to miss — it is at the very bottom left, in the tab bar.

02Add as many jobs as the work needs

Objective

See that a project holds a library of jobs, not a single one.

Actions

  1. Press + again to create a second job.
  2. Switch between the two tabs and note that each keeps its own canvas.
  3. Open Workflow configuration and expand Jobs in the palette.
Jobs configuration → + → Workflow configuration → Jobs

Each job is independent: its own folder, its own four manifests, its own canvas. What connects them is the workflow, and nothing else.

Tip

Every job you create joins the workflow palette by itself. You never register it anywhere — the Jobs category simply lists what the project contains. That is what makes a job reusable: design it once, orchestrate it in as many workflows as you like.

What you should see

The count beside Jobs matches the number of tabs, and each job appears by name.

Jobs (2)
  job1
  job2
The workflow scene with two jobs listed in the palette under Jobs, and one job node selected on the canvas showing its hover toolbar.
Two jobs in the project, two entries in the palette. The node on the canvas carries a red badge because the job is not configured yet.

03Rename, archive or delete a job

Objective

Learn the three ways to dispose of a job, and which one is reversible.

Actions

  1. Right-click a job in the Jobs list of the palette, or in its tab.
  2. Read the three entries in the menu.
  3. Close the menu without choosing.
Jobs → right-click → Rename · Archive · Delete

Archive and Delete look alike and are not. This is the difference worth knowing before you need it.

ActionWhat happens on diskReversible
RenameThe job takes a new name; its four manifests are untouched.
ArchiveThe folder is renamed <name>.backup. Every manifest survives. A second archive of the same name is timestamped, so nothing is ever overwritten.Yes — rename the folder back.
DeleteThe folder and its four manifests are removed.No.
Trap

A job still placed on the workflow canvas cannot be archived. Studio refuses and tells you to remove the node first — otherwise the workflow would point at a job that no longer answers to that name. Remove the node, then archive.

What you should see

Three entries, Delete set apart below a separator and printed in red. The separator is the warning.

Rename
Archive
────────
Delete

04Enter a job from the workflow

Objective

Move from orchestration to design without hunting for a tab.

Actions

  1. Stay on Workflow configuration.
  2. Double-click a job node on the canvas.
  3. Read the breadcrumb once the scene has changed.
Workflow configuration → double-click a job node

Double-clicking a job node does not open a dialog — it takes you inside. The breadcrumb then reads the workflow, then the job, so you always know how deep you are.

What you should see

The scene switches to Jobs configuration, on the job you double-clicked, with the source palette in place of the action palette.

wf1 / job1   1 nodes · 0 edges   Valid

05Drop a source, and read its warning

Objective

Place a node, and learn what Studio says about a node it cannot use yet.

Actions

  1. Expand Sources in the palette.
  2. Drag CSV onto the canvas.
  3. Look at the top right corner of the node.
Sources → CSV → drag onto the canvas

A freshly dropped node carries a small red exclamation mark. It is not an error — it is an unanswered question. The node exists, its type is chosen, but the one thing it needs, a file to read, is still missing.

What you should see

A node named after its type, with a badge in the corner. The badge disappears the moment the required field is filled.

source_csv_1
CSV   (!)
A CSV source node freshly dropped on the job canvas, carrying a red exclamation badge in its top-right corner.
The red badge means not configured yet, never broken.

06Configure a file source

Objective

Answer the only question a CSV asks.

Actions

  1. Double-click the node.
  2. Fill File path, or use Browse to pick the file.
  3. Save, and watch the badge go.
double-click → File path → Save

One required field, marked with a red asterisk. Prefer Browse to typing: it writes a path that exists, which removes the most common cause of a job failing on its first run.

What you should see

The badge disappears and the node takes the step name you gave it. That name is the identifier pipeline.yaml will refer to.

CSV  SOURCE   Reads a CSV file
  STEP NAME   source_csv_1
  FILE PATH * ./data/file.csv
The CSV source dialog, with a step name, a required file path field and a Browse button.
JSON and Parquet ask exactly the same question — only the format differs.

07Configure a database source

Objective

Read a connection form, and learn where a password belongs.

Actions

  1. Drag PostgreSQL, MySQL or MongoDB onto the canvas.
  2. Choose between Table and SQL query.
  3. Read the tip under the password field.
Sources → PostgreSQL → Table | SQL query

A database asks more than a file, and the first choice shapes the rest. Table reads a whole table. SQL query lets the server do the filtering and the joining before a single row reaches Hydra — usually the faster option on a large table.

Never type a password here

Write ${ENV:MY_SECRET} instead, and define the real value under Environments, in a .env file kept out of Git. Studio says so under the field, and it is the one rule to respect without exception: a manifest is a file you commit, share and paste into a ticket.

What you should see

Required fields marked with a red asterisk — the table, the host, the database and the user. The port is pre-filled with the usual value for that engine.

PostgreSQL  SOURCE   PostgreSQL query
  DATA SOURCE   Table | SQL query
  TABLE *  HOST *  PORT 5432  DATABASE *  USER *  PASSWORD
The PostgreSQL source dialog, with a Table or SQL query switch, connection fields, and a security tip under the password field recommending an environment reference.
The password field shows the syntax to use, and names where the real value belongs.

08Configure an HTTP source

Objective

Read from a service instead of a file or a table.

Actions

  1. Drag Web API onto the canvas.
  2. Enter the endpoint URL.
  3. Open the Method list and read the four verbs.
Sources → Web API → URL · Method

The URL is the only required field; the method defaults to GET, which is what reading normally means. The other three exist because some services expect a POST to return a result — a search endpoint taking its criteria in the body, for instance.

The Web API source dialog, with a required URL field and a method list set to GET.
Web API. One required field, and a method that defaults to reading.
The same dialog with the method list open, showing GET, POST, PUT and DELETE.
Four verbs. GET covers almost every case where an API is a source.
Web API reads, it never writes

There is no HTTP destination in the palette. To send data out over HTTP, orchestrate a Webhook action in the workflow scene instead. Same protocol, opposite direction, different scene.

What you should see

A short form, and a method list holding exactly four entries.

Web API  SOURCE   REST HTTP call
  URL *
  METHOD   GET  POST  PUT  DELETE
Tips and traps

Any job is four manifests in a folder. Studio writes them, hdrctl reads them.

A red badge means not configured, not broken. It clears as soon as the required field is filled.

Reach for Browse rather than typing a path. A path that exists cannot be misspelled.

A password never belongs in a node. Write ${ENV:NAME} and keep the value in Environments.

On a large table, prefer SQL query to Table. Filtering at the server saves rows Hydra never reads.

Archiving a job placed on a canvas is refused. Remove the node first, then archive.

An archive keeps the folder as .backup; a delete keeps nothing at all.

Double-clicking a job node changes scene. It does not open a dialog — look at the breadcrumb.

3. Checklist

VerificationExpected result
Job creationA tab appears, and a folder with four manifests
Workflow paletteLists the job without any registration step
Job menuRename, Archive, then Delete below a separator
Fresh nodeCarries a red badge until it is configured
CSV sourceOne required field: the file path
Database sourceTable or SQL query, and a password written as ${ENV:NAME}
Web API sourceA URL, and a method defaulting to GET

4. Troubleshooting

SymptomCauseFix
No + buttonYou are in the workflow sceneSwitch to Jobs configuration; the button is at the bottom left
The badge stays after savingA required field is still emptyReopen the node and look for the red asterisk
Archive is refusedThe job is placed on the workflow canvasDelete the node from the canvas, then archive
The job runs but reads nothingThe path is valid but the file is elsewhereReopen the source and use Browse
A password ended up in the manifestThe value was typed into the fieldReplace it with ${ENV:NAME} and rotate the secret
No HTTP destination in the paletteWeb API is a source onlyUse the Webhook action in the workflow scene

5. Next lesson

The job exists and knows where its data comes from. The next lesson places what comes after it: the transformations that reshape the data on its way through.

Close by

0 / 0 on this page