A destination is configured a single time, then picked from a list on any job that needs to deliver there. This page covers setting one up and reusing it, whatever type it is.
No credit card. 14 days. Cancel in one click.
Quick answer: Set up a destination once, under the + next to Destinations, and it's available to every job you schedule afterward, picked from a list instead of re-entering its details. This works the same for S3, SFTP, email, Slack, Teams, Google Sheets, and BigQuery or Databricks tables. Pipelines tier for everything except Save to File and Email.
Say three separate reports all need to land in the same BigQuery reporting table: a daily signups count, a daily revenue rollup, and a weekly retention number. Without a reusable destination, that's the same connection, table name and write mode typed three separate times, and three separate places to make a mistake if the table ever gets renamed.
Set it up once instead:
Destination name: Reporting - BigQuery daily rollups Type: Database (BigQuery) Connection: analytics-prod Target Table: reporting.daily_metrics Write Mode: Append (INSERT)
Now all three scheduled jobs pick "Reporting - BigQuery daily rollups" from the destination list. If reporting.daily_metrics ever gets renamed, one edit to the destination fixes all three jobs, not three separate edits you might forget one of.
A single scheduled job with its own one-off output barely benefits from a reusable destination. The benefit shows up once you're running five or ten jobs against the same handful of places: a Slack channel for alerts, an S3 bucket a downstream tool watches, a reporting table three dashboards read from. Building those three or four destinations once and reusing them across every job that needs one is meaningfully less error-prone than re-typing a bucket name or a channel ID each time you schedule something new.
A destination named "S3" or "BigQuery" stops being useful the moment you have a second one of the same type. Name it by what it's for: "Finance team S3 export," "Slack #data-alerts," "Reporting warehouse (Append)." The write mode is worth including in the name specifically, since Append and Replace destinations pointed at the same table are easy to mix up six months later when you're not the one who set them up.
Reuse makes sense when several jobs genuinely deliver to the same place with the same write mode. It stops making sense the moment two jobs need slightly different behavior, one should Append and another should Replace against the same table, for instance. Forcing both through one shared destination just to avoid creating a second one usually costs more confusion later than the minute it takes to set up a second, differently-named destination.
Run a job that uses the destination and check the run history for that job. A successful delivery shows there; a failure usually names the same problem a connection Test would show, a permissions gap or an expired credential on the destination side rather than the source.
| If you see | Fix |
|---|---|
| No BigQuery connections available. Add a BigQuery connection under Databases first. | Add the underlying connection before building a database destination on top of it. |
| Job fails on write | Give the account write access on the target (BigQuery Data Editor, or MODIFY in Databricks). |
| A shared destination stopped working for everyone using it | Check the destination itself first, one broken credential now affects every job that reuses it. |
Yes, that's the whole point. Configure it once and pick it from the list every time a job needs to deliver there.
Every job using it picks up the change the next time it runs. That's useful for fixing a renamed table in one place, but worth double-checking before editing a shared destination casually.
Most do. Save to File and Email are Studio; SFTP, S3, database destinations, Google Sheets, Slack and Teams need Pipelines.
The job will fail on its next run if the destination it points to no longer exists, so update or remove it from any job before deleting the destination itself.
Configure it once, reuse it on every job that needs the same place. Get QueryFlow →