BigQuery Data Transfer Service: Automated Data Pipelines Into Your Warehouse
A complete, plain-English guide to how Google Cloud moves data from SaaS tools, other clouds, databases and storage buckets into BigQuery on a schedule, without writing or babysitting pipeline code.
Imagine you run a busy restaurant. Every morning, a truck arrives with vegetables from one farm, meat from another, bread from a bakery and spices from an importer. If you had to drive to each supplier yourself, load the boxes, check the quality and carry everything into your kitchen, you would spend your whole day driving and never cook a single meal. So you hire a delivery service that knows every supplier, visits them on a fixed schedule, brings everything to the same kitchen door and tells you if a delivery is late.
Data teams face exactly this problem. Marketing numbers live in advertising platforms, sales numbers live in a CRM, payments live in a payment provider, and files land in storage buckets. Analysts want all of it inside one warehouse, fresh every day. The BigQuery Data Transfer Service is Google Cloud’s delivery service for data: it knows the suppliers, visits them on a schedule, and drops the goods into BigQuery. This guide explains every part of that service so clearly that you could teach it to someone else.
1What Is BigQuery Data Transfer Service?
A managed service that loads data into BigQuery on a repeating schedule, with no custom code.
The Short Definition
The BigQuery Data Transfer Service, often shortened to BigQuery DTS or just DTS, is a fully managed Google Cloud service that automates the movement of data into BigQuery. You describe where the data lives, where it should land and how often it should move. Google then runs the transfers for you, keeps a history of every run and retries or reports when something goes wrong.
The key words are managed and scheduled. Managed means you do not create servers, install agents for most sources, or maintain scripts. Scheduled means that after you configure a transfer once, it keeps running by itself every day, every week or at whatever repeating time you chose.
Think of a newspaper subscription. You do not walk to the printing press each morning. You tell the newspaper your address once, and the paper shows up on your doorstep on schedule. DTS is a subscription for data: you give it the source and the destination once, and fresh data arrives on schedule.
What It Is Not
It helps to know the boundaries early. DTS moves data into BigQuery. It cannot be used to move data out of BigQuery to another system. It is also not a streaming engine: it works in batches, so data arrives in chunks at scheduled times rather than row by row in real time. Finally, it is not a general-purpose transformation tool. It lands data in tables; shaping that data further is the job of SQL, scheduled queries or other services.
Three Ways to Operate It
You can configure and manage transfers from the Google Cloud console, from the bq command-line tool, or through the BigQuery Data Transfer Service API. The console is friendly for first-time setups because it presents forms that match each source. The command line and API are better for repeatable automation, and infrastructure-as-code tools can drive the same API so that transfers are versioned like any other part of your platform.
2The Problem DTS Solves
Why moving data by hand, or with homemade scripts, quietly becomes a full-time job.
The Hidden Cost of Homemade Pipelines
Before managed transfer services, a typical team wrote a small script to pull data from an advertising platform, then another for the CRM, then another for a payment provider. Each script needed credentials, a place to run, a scheduler, error handling, retry logic and monitoring. Each source also had its own quirks: different authentication styles, different page sizes, different rate limits and different ideas of what “yesterday” means.
At first, three scripts feel cheap. A year later, those three scripts have become thirty, the person who wrote them has moved teams, and nobody remembers why one of them skips Sundays. The pipeline is now a risk that sits between the business and its numbers.
Many beginners think “loading data” is the easy part and “analysis” is the hard part. In practice, keeping data loads reliable, repeatable and observable is where most of the ongoing effort goes. Anything that reduces that effort is valuable.
What DTS Takes Off Your Plate
Source knowledge
Google maintains the logic for talking to each supported source, including its schemas and quirks.
Repeating runs
The service decides when to start each run and records what happened.
Backfills
You can reload a past date range to fix an outage or fill a gap.
Run history
Every run has a status, a time and logs you can inspect.
Identity handling
It integrates with IAM, service accounts and service agents for controlled access.
Notifications
Email or Pub/Sub messages can tell you when a run finishes or fails.
3Core Concepts and Vocabulary
Eight words that appear in every DTS conversation, each explained from scratch.
Every technology has its own vocabulary, and DTS is no exception. Learn these eight terms and the rest of the service becomes easy to follow. For each term, remember three things: what it is, why it exists and where you will meet it.
Data Source
The type of system you pull from, such as Google Ads, Amazon S3 or PostgreSQL. Each data source has its own settings and rules.
Transfer Configuration
The saved recipe: which source, which destination dataset, which schedule and which parameters. One configuration produces many runs over time.
Transfer Run
One single execution of a configuration for a particular time window. Each run has a status and a record in the history.
Destination Dataset
The BigQuery dataset, a folder-like container, where the transferred tables are created. Its location also decides where the transfer is processed.
Transfer Owner
The identity, a user or a service account, whose credentials are used to read the source and create the transfer.
Service Agent
A Google-managed identity created for your project when the API is enabled. It performs privileged background work on your behalf.
Backfill
A request to load data for past dates, used to recover from outages or to fill history after the first setup.
Refresh Window
Some sources keep adjusting recent numbers for days. A refresh window re-pulls the last few days automatically so late changes are captured.
A transfer configuration is like a standing order at a coffee shop: “one latte every morning at eight.” Each morning’s latte is a transfer run. The data source is the shop, the destination dataset is your desk, and a backfill is saying “I missed last Tuesday, please make that one again.”
Configuration Versus Run
Beginners often confuse these two ideas, so it is worth pausing. The configuration is permanent and describes intent. The run is temporary and describes one attempt to fulfil that intent. If you edit the schedule, you change the configuration. If you want to see why last night failed, you open the run. Keeping this separation in mind makes troubleshooting far easier.
4Architecture and Components
The moving parts between a source system and a BigQuery table.
The Big Picture
At a high level, the service sits between your sources and your warehouse. On the left are the places data lives. In the middle is the control plane of DTS, which stores configurations, triggers runs and tracks status. On the right is BigQuery, where the data lands and where standard storage and query behavior takes over.
flowchart LR
A["Sources: SaaS, ads, clouds, databases, buckets"] --> B["Transfer configuration"]
B --> C["DTS scheduler and run engine"]
C --> D["Connector reads source data"]
D --> E["Staging in dataset location"]
E --> F["BigQuery destination dataset"]
C --> G["Run history and logs"]
C --> H["Notifications: email or Pub/Sub"]
Read the diagram from left to right. The configuration is the instruction card. The scheduler and run engine act on that card at the right time. A connector, which is the piece of logic that understands one specific source, reads the data. The service stages the data in the same location as your destination dataset and then writes it into BigQuery tables. Alongside this main path, the run engine records history and can send notifications.
Key Components Explained
Control plane
This is the brain. It stores every transfer configuration, evaluates schedules, starts runs and keeps statuses. You interact with it through the console, command line or API, and you never manage its infrastructure.
Connectors
A connector is a prebuilt adapter for one data source. It knows how to authenticate, which objects or reports exist, how to page through results and how to map source fields to BigQuery columns. This is where most of the “source quirks” knowledge lives.
Staging and loading
The service processes and stages data in the same location as the destination dataset, then loads it into BigQuery. This is why choosing the dataset location carefully matters so much.
Run history and logs
Each run produces a status and diagnostic messages. This history is your first stop for answering “did it work, when, and if not, why?”
Identity layer
Transfers act as an owner identity, and a Google-managed service agent performs background tasks such as fetching access tokens, starting BigQuery jobs and publishing notifications. Chapter 12 covers this in depth.
Because the service itself is managed, your operational responsibilities shrink to three things: choosing correct configuration, granting correct permissions and watching the results. Everything else is Google’s job.
5Supported Data Sources
The family of suppliers DTS can already talk to, grouped by type.
DTS supports a broad and growing set of sources. Google groups them into categories, and the exact list changes as connectors are added, promoted from Preview or updated. Always confirm the current list and each connector’s launch stage in the official documentation before you design around a source. The groups below give you a reliable mental map.
| Category | Examples | Typical Use |
|---|---|---|
| Cloud storage | Amazon S3, Azure Blob Storage, Cloud Storage | Loading files such as CSV, JSON, Avro or Parquet on a schedule or when new files arrive |
| Databases and warehouses | Amazon Redshift, Apache Hive Metastore, MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Snowflake, Teradata | Migrations and recurring replication of tables into BigQuery |
| Google marketing and advertising | Google Ads, Campaign Manager, Display and Video 360, Search Ads 360, Google Ad Manager | Campaign performance and reporting data |
| Other Google services | Google Analytics 4, Google Play, Google Merchant Center, YouTube channel and content owner reports | Product, app and content analytics |
| SaaS and third-party platforms | Salesforce, Salesforce Marketing Cloud, ServiceNow, Facebook Ads, HubSpot, Klaviyo, Mailchimp, Shopify | Customer, marketing and operations data |
| Payments | PayPal, Stripe | Transaction and revenue reporting |
Several connectors have been offered in Preview at various times. Preview features can have different support terms, limits or behaviors than generally available ones. Do not build a critical, audited process on a Preview connector without reading its terms and planning a fallback.
Why the Split Between Google and Non-Google Sources Matters
Google publishes a data delivery objective for automatically scheduled transfers from sources within Google Cloud. That objective does not apply to transfers from non-Google Cloud sources, because outages or slowness in a third-party system can affect delivery and are outside Google’s control. In everyday terms: if the supplier’s truck breaks down, the delivery service cannot promise the groceries will arrive on time. Plan buffers into downstream reports that depend on third-party sources.
A courier can promise to deliver within a day from its own warehouse. It cannot promise the same for a package that has not yet left a supplier’s loading dock. The same logic applies to data from outside Google Cloud.
6How a Transfer Works: The Lifecycle
From saving a configuration to seeing rows in a table, step by step.
Phase One: Setup
Before anything runs, the project needs the BigQuery Data Transfer API enabled, a destination dataset must exist, and the person or service account creating the transfer needs the right permissions. When you save a configuration, the service validates settings and the credentials needed to read the source. For user-owned transfers against many sources, you will be asked to authorize access through a standard consent screen.
Phase Two: Runs
Schedule fires
At the configured time, the control plane creates a run for the relevant time window and marks it pending.
Credentials are resolved
The service obtains an access token for the transfer owner. For service accounts, the service agent impersonates the account to get the token.
Connector reads the source
The connector pulls the requested slice of data. Some sources are fast and some are throttled, so run time varies widely.
Data is staged and loaded
Data is staged in the destination dataset’s location and loaded into BigQuery tables using BigQuery jobs.
Status is recorded
The run ends as succeeded, failed or cancelled, and the outcome is stored in run history. Notifications go out if configured.
sequenceDiagram
participant S as Schedule
participant D as DTS Control Plane
participant A as Service Agent
participant X as Source System
participant B as BigQuery
S->>D: Time reached, create run
D->>A: Request access token for owner
A-->>D: Token granted
D->>X: Read data for time window
X-->>D: Return records
D->>B: Stage and load into tables
B-->>D: Load result
D->>D: Save run status and logs
The sequence shows that DTS acts as the coordinator. It never needs you to be online. Each arrow represents a point where something can fail: an expired authorization, an unreachable source, a schema surprise or a permission gap on the destination. Knowing the order of events tells you where to look when a run fails.
Update Deadlines
Each data source has a limit for how long the service will wait for an update before it marks the run as failed. This protects you from runs that hang forever. If a run fails with a timeout-like message, the cause is usually a very large source slice, a slow source system or a connectivity problem rather than a bug in your configuration.
After creating any new transfer, trigger one manual run right away and confirm that rows appear in the destination. Discovering a permission mistake on day one is far cheaper than discovering it three weeks later.
7Scheduling and Refresh Windows
Deciding how often data moves, and how to catch numbers that change after the fact.
Choosing a Schedule
Most configurations use a repeating schedule such as daily, weekly or monthly, and many sources let you choose a time of day. The default for many connectors is once a day, which fits the way most reporting works. The shortest allowed interval depends on the source, so check the connector’s documentation if you need frequent loads. More frequent is not automatically better: each run uses source API capacity and may have cost or quota effects.
Checking your mailbox every five minutes will not make letters arrive faster. The postal service delivers once or twice a day. Match your pickup schedule to how fast the source actually produces new data.
Why Recent Data Changes
Advertising and analytics platforms often revise recent numbers. A click may be re-classified as invalid a day later, or a conversion may be attributed to a campaign two days after the fact. If you load yesterday’s data once and never look again, your warehouse can drift away from what the platform itself reports.
To solve this, some connectors support a refresh window. With a sliding window, each run re-reads the last several days and updates them, so late adjustments are folded in automatically. The source’s own settings describe whether it supports this behavior and the default number of days.
Treating today’s partial data as final. Many sources are incomplete until a day or more has passed. Build dashboards so that the most recent days are clearly marked as provisional.
Time Zones and Time Windows
Transfers work with time windows, and the boundaries of a “day” depend on how the source and the transfer are defined. Run times are commonly reasoned about in Coordinated Universal Time, while the business may think in local time. Agree on one convention for reporting, document it, and test with a known date to confirm that numbers in BigQuery match the source’s own report for that date.
Pick the freshness the business actually needs
Ask how late a number can be before a decision is harmed. Daily is usually enough for marketing and finance reports.
Check the connector’s allowed interval
Confirm the minimum interval and whether the source supports a refresh window.
Schedule after the source finalizes data
Run a little after the platform typically completes its daily processing, then add downstream jobs after that.
8Backfills: Recovering and Loading History
How to fill gaps, repair outages and load the past after a new transfer is created.
What a Backfill Really Is
A new transfer usually starts loading from today onward. But analysts almost always want history: last quarter, last year, or at least the last few weeks. A backfill is a manual request that tells the service, “run this configuration for these past dates.” Each date in the range becomes its own run, so you can watch progress in run history exactly like a normal scheduled run.
Backfills are also your repair tool. If a source was down for two days, if a credential expired over a weekend, or if a permission was removed by mistake, the schedule will have skipped or failed those days. After you fix the cause, a backfill for the missing dates restores the table without any custom recovery code.
If your newspaper delivery missed three mornings while you were away, you would call and ask for those three editions to be sent. A backfill is that phone call. It does not change the future delivery plan; it just fills the shelf with the editions you missed.
Limits to Remember
How far back you can go is controlled by the source, not by DTS. Each data source keeps only a certain amount of history and exposes only part of it through its reporting interface. Some sources support daily windows only. Date ranges are aligned to day boundaries, and the service treats the start and end as whole days in Coordinated Universal Time. Always read the connector’s page for the maximum history and for any rules about range size.
Whether re-running a date replaces or appends depends on the source and its write behavior. Before backfilling a large range, test on one day and compare row counts against the source report. Never assume a repeat run is harmless without checking.
A Safe Backfill Routine
Fix the root cause first
Repair the credential, permission or source problem that created the gap. Backfilling before fixing only produces more failures.
Test one day
Backfill a single recent date, then compare totals with the source’s own screen for the same day.
Run the full range in sensible chunks
Break very long periods into smaller ranges so a failure affects fewer days and quotas are respected.
Verify and announce
Confirm every run in the range succeeded, then tell downstream report owners that history changed.
9Scheduled Queries and Dataset Copies
Two everyday BigQuery features that quietly run on the same service.
DTS is not only about pulling data in from outside. The same engine also powers two operations that happen entirely inside Google Cloud. Many people use them for months without realizing they are using the Data Transfer Service at all.
Scheduled queries
A saved SQL statement that runs on a repeating schedule and writes its result to a table. Ideal for daily summaries, cleaned views of raw data and rolling aggregates.
Dataset copies
A scheduled or one-time copy of a whole dataset to another dataset, including across projects or regions where allowed. Useful for backups, sharing and environment refreshes.
Why They Belong Together
Ingestion is only the first half of a data platform. The second half is shaping raw tables into trustworthy, ready-to-query tables. By letting the same scheduler handle both, a small team can build a complete daily rhythm: raw data arrives from outside sources, scheduled queries clean and summarize it, and dataset copies publish final tables to consumer projects.
flowchart TD
A["Source transfers land raw tables"] --> B["Scheduled query cleans and joins"]
B --> C["Scheduled query builds summary tables"]
C --> D["Dataset copy publishes to reporting project"]
D --> E["Dashboards and analysts"]
Scheduled queries do not automatically wait for a source transfer to finish. Place them at a comfortable gap after your ingestion run, or use an event-based trigger from a workflow tool when strict ordering matters.
Credentials for Internal Jobs
When scheduled queries or dataset copies run, the service starts BigQuery jobs using the transfer owner’s credentials. That means the owner must keep the right access to both the source tables and the destination. If the owner is a person who later leaves the company or loses access, those jobs can start failing. Using a service account as owner, where supported, removes this dependency on a human.
10Event-Driven Transfers From Cloud Storage
Loading files when they arrive, instead of waiting for the clock.
The Idea
Schedules are great when data is produced on a rhythm. But files often arrive at unpredictable times: a partner drops a report at noon one day and at four the next. For Cloud Storage sources, DTS offers an event-driven mode. Instead of running on a timer, the transfer reacts when a new file shows up in the bucket.
A scheduled transfer is like checking your doorstep every morning at eight. An event-driven transfer is like a doorbell: you act the moment a package is dropped off, whatever time that happens.
How the Pieces Connect
Cloud Storage can publish a notification to a Pub/Sub topic whenever an object is created. A Pub/Sub subscription holds those messages. The BigQuery Data Transfer Service service agent reads from that subscription, learns about the new file and starts a load. Because of this chain, correct permissions on Pub/Sub and on the bucket are essential, and the service agent must be allowed to subscribe to the relevant resources.
sequenceDiagram
participant P as Partner or Pipeline
participant G as Cloud Storage Bucket
participant T as Pub/Sub Topic
participant U as Pub/Sub Subscription
participant D as DTS Service Agent
participant B as BigQuery
P->>G: Upload new file
G->>T: Object created notification
T->>U: Message delivered
D->>U: Pull event
D->>G: Read the new file
D->>B: Load into destination table
Forgetting to grant the subscriber role to the service agent is the classic reason event-driven transfers sit idle. If files arrive and nothing loads, check the notification on the bucket, then the subscription, then the service agent’s role, in that order.
When to Choose Events Over Schedules
Irregular partner deliveries
When external parties upload files at unpredictable times and you want data available soon after, events avoid both long waits and wasteful empty runs.
Chained internal pipelines
When one internal system writes an export to a bucket after finishing its own work, an event naturally starts the next step without guessing a safe delay.
Keep schedules when rhythm is stable
If files always land before a known time, a plain schedule is simpler, has fewer moving parts and is easier to explain to a new teammate.
11Locations and Regions
Why the place where your dataset lives quietly decides where everything else happens.
Like BigQuery itself, DTS works with locations. The transfer configuration takes the same location as the destination dataset, and the service processes and stages data in that location. In other words, you do not pick a processing region for the transfer separately. You pick the dataset’s location, and the transfer follows it.
Data Can Come From Anywhere
Transfers are supported from data stored in a wide range of places to a destination dataset in the location you choose. Compatibility is documented per source, so always check the official location page for your connector. The practical lesson is to decide dataset locations early, because moving data between locations later requires extra work and planning.
Location is set once
The dataset’s location is chosen at creation and cannot simply be flipped later.
Transfers follow datasets
The configuration lives in the dataset’s location and so do staging and processing.
Compliance first
If rules require data to remain in a region or country, choose that location before the first run, not after.
Keep related data together
Queries joining tables across locations are restricted, so co-locate datasets that will be joined often.
Write down a one-line location decision for every project, such as “all customer data stays in one named region.” Review it whenever a new source is added so no transfer silently breaks the rule.
12Security, Identity and Access
Who is allowed to do what, and which identity actually touches your data.
Three Different Identities
Security in DTS becomes easy once you separate the identities involved. There are three, and each has a different job.
The transfer creator
The person or service account that sets up the configuration. They need permission to create transfers and to write to the destination dataset. Google recommends the BigQuery Admin role for people who create transfers, since it includes the common permissions needed.
The transfer owner
The identity whose credentials are used to read the source. It can be a user account or, for sources that support it, a service account. Ownership can later be moved to a new account with the right permissions.
The service agent
A Google-managed account created when you enable the API. It holds a special role that allows it to get access tokens for a service account owner, start jobs, publish notifications and read event subscriptions.
Picture a company that sends an assistant to collect parcels. The manager who creates the errand is the creator. The employee badge the assistant shows at the supplier’s desk is the owner credential. The building’s own security desk that issues temporary passes is the service agent. Each plays a different role in getting the parcel safely inside.
User Owners Versus Service Account Owners
If the owner is a person, that person usually has to approve access through a consent screen so the service can read the source on their behalf. If that person later leaves, loses access or revokes the consent, the transfer stops working. If the owner is a service account, no human consent is needed, and the service agent impersonates the account to obtain tokens. This is more stable and easier to audit, which is why service accounts are the preferred choice wherever the connector supports them.
Service account owner
- Survives staff changes without breaking transfers
- Easy to restrict to least privilege
- Clear audit trail tied to a named workload
- No personal consent screen to repeat
User account owner
- Breaks if the person leaves or access is revoked
- Permissions often broader than the task needs
- Harder to audit who really acted
- Required for some sources that lack service account support
Cross-Project Authorization
Sometimes the service account that owns a transfer lives in a different project from the one where the transfer service is enabled. In that case, the service agent of the transfer project needs permission to create tokens for that account. Google recommends granting this at the level of the specific service account, not across the whole project, to follow least privilege.
Notifications and Their Permissions
Transfers can send run notifications by email or to a Pub/Sub topic. Email needs no extra permission. Pub/Sub notifications require the person configuring them to be allowed to set the topic’s access policy, so the service can publish to it. Always test a notification by running a transfer once and watching the topic.
Problem
A team creates every transfer under one engineer’s personal account because it is the fastest way to finish setup.
Why It’s Harmful
When that engineer changes roles or leaves, every transfer fails at once. The permissions on that personal account are also usually far wider than any single transfer needs, which raises risk.
Correct Approach
Create a dedicated service account for each logical pipeline, grant it only the permissions that pipeline needs, and set it as the transfer owner wherever the source supports it.
Protecting Data Once It Lands
After data reaches BigQuery, ordinary BigQuery security controls apply. You can restrict datasets and tables through IAM, limit sensitive columns with column-level controls, and apply encryption policies that your organization requires. Treat the destination dataset as the security boundary: give analysts access to curated tables, and keep raw landing datasets visible only to the pipeline owners.
13Cost, Quotas and Capacity
Understanding what you pay for and what limits exist, without memorizing numbers that change.
Where Costs Come From
Pricing for transfers depends on the data source, and Google publishes it on a dedicated pricing page. Some connectors are offered at no separate charge, while others have their own pricing model. Because these details change over time, always confirm the current terms for your exact connector before you commit to a design.
Regardless of connector, once data is in BigQuery, normal BigQuery storage and query costs apply. This is the cost most teams actually feel: the loaded tables take up storage, and every analyst query over them consumes compute. A well-designed transfer plan therefore thinks about what to load, not only how.
Transfer charges
Depends on the connector. Verify on the official pricing page.
Storage
Billed as for any BigQuery table, so retention and partitioning choices matter.
Queries
Analysts and scheduled queries consume compute, either on demand or from reserved capacity.
Source-side costs
Some systems charge for exports, API usage or cross-cloud data egress. These appear on the other provider’s bill.
Slots and Reservations
Jobs triggered by the service use reserved capacity only if your project, folder or organization is assigned to a reservation that covers the relevant job types. If you do not have such an assignment, the jobs run without drawing on reserved slots. Teams with reservations should check that the right job types are included so that transfer-related jobs behave as expected.
Quotas
Like most cloud services, DTS has quotas and limits, such as how many configurations a project can hold and how quickly requests can be made. The values are published on the quotas page and can differ by source. Treat quotas as design inputs: if you plan to create hundreds of configurations, check the limits first and consider combining similar transfers where the connector allows.
Partition large landing tables by date and set sensible expiration on raw data you do not need forever. Small design choices at load time save real money at query time.
14Monitoring, Logging and Troubleshooting
Knowing when a transfer is healthy, and finding the cause fast when it is not.
What to Watch
A transfer that silently stops is worse than one that fails loudly, because people keep trusting stale numbers. Build three layers of visibility: per-run status in the transfer’s run history, notifications that reach a human or a system, and freshness checks on the destination tables themselves.
Run history
Check the list of runs for failed or cancelled entries, and open any run to read its messages.
Notifications
Send failure messages by email or to a Pub/Sub topic that feeds your team’s alerting channel.
Freshness checks
Run a small scheduled query that compares the latest date in each table with today and raises a flag when the gap is too large.
Cloud logging and audit trails
Use platform logs to see who changed a configuration and when, which helps with both security reviews and debugging.
The Usual Suspects When a Run Fails
| Symptom | Likely Cause | First Thing To Check |
|---|---|---|
| Authorization error | Owner’s consent expired or was revoked, or a role was removed | Re-authorize the owner or restore the missing role |
| Permission denied on destination | Owner or service agent lacks write access to the dataset | Dataset-level permissions and agent role |
| Run stuck or times out | Slow or overloaded source, very large time slice | Source status and chunk size of the request |
| Event-driven transfer idle | Missing bucket notification or subscriber role | Notification, subscription and agent role |
| Totals differ from source | Source revised recent data, or time zone mismatch | Refresh window and day-boundary convention |
| Location error on setup | Dataset in an unsupported or mismatched location | Location compatibility page for the connector |
Work from the outside in: is the source reachable, is the identity authorized, is the destination writable, and only then look at schemas and data. Most failures are access problems, not data problems.
15Advantages, Disadvantages and Trade-offs
An honest look at when DTS shines and where it is the wrong tool.
Advantages
- No servers, schedulers or custom ingestion code to maintain for supported sources
- Built-in schedules, run history, retries and notifications
- Backfills make recovery from outages simple and repeatable
- Tight integration with IAM, service accounts and BigQuery security
- Same engine powers scheduled queries and dataset copies, keeping the toolset small
- Fast to start: a first transfer can often be configured in minutes
Disadvantages / Trade-offs
- Limited to the supported connectors and the fields they expose
- Batch-oriented, so it is not designed for real-time streaming needs
- Little room for custom transformation during the load
- Third-party sources are outside Google’s delivery objective
- Some connectors are in Preview and may change
- One-directional: it cannot export data out of BigQuery
How DTS Compares With Neighboring Tools
| Tool | Best For | Compared With DTS |
|---|---|---|
| BigQuery Data Transfer Service | Scheduled loads from supported sources with minimal setup | Easiest path when a connector exists |
| Dataflow | Custom batch or streaming pipelines with transformations | More flexible, more to build and operate |
| Cloud Data Fusion | Visual, code-light pipeline design with many connectors | Broader design surface, heavier platform |
| BigQuery load jobs | One-off or self-scheduled file loads | Fully manual scheduling and monitoring |
| Datastream | Continuous change capture from databases | Near real-time replication, versus periodic batches |
| Cloud Scheduler with custom code | Calling arbitrary services on a timer | Maximum freedom, maximum maintenance |
Start with DTS. If a needed source has no connector, or you need row-level transformation or sub-minute freshness, move to a more flexible service for that one pipeline while keeping DTS for the rest.
16Design Patterns and Anti-Patterns
Habits that make transfers boring and reliable, and habits that make them fragile.
Patterns That Work
Raw, clean, curated layers
Land source data untouched in a raw dataset, use scheduled queries to produce cleaned tables, then publish curated tables for analysts. If a business rule changes, you can rebuild downstream layers from untouched raw data.
One owner identity per pipeline
Give each pipeline its own service account. Problems stay isolated, permissions stay small, and audits are simple.
Environment separation
Keep development, test and production transfers in separate projects or datasets so a mistaken edit in one cannot damage reports in another.
Freshness as a first-class check
Treat “how old is the newest row” as a metric with an alert, not as something people discover when a dashboard looks odd.
Configuration as code
Define transfers through the API or infrastructure tooling so changes are reviewed and recorded like application changes.
Anti-Patterns To Avoid
Problem
Analysts query the raw landing tables directly and build dashboards on top of them.
Why It’s Harmful
Raw tables can change shape when a source adds fields or revises data. Dashboards break unexpectedly, and nobody owns the business logic hidden in each analyst’s query.
Correct Approach
Expose only curated tables or views to analysts. Keep the logic in scheduled queries owned by the data team.
Problem
Nobody is notified when a transfer fails, and the team relies on someone noticing a stale chart.
Why It’s Harmful
Failures can run for days. Decisions are made on old numbers, and trust in the data platform erodes quickly.
Correct Approach
Configure notifications for every transfer and add a freshness check on each destination table.
Problem
A team schedules a transfer every few minutes “just in case,” even though the source updates once a day.
Why It’s Harmful
It burns source API capacity, can hit quotas and adds noise to run history without producing any fresher data.
Correct Approach
Match the schedule to how often the source truly produces new, final data.
17Best Practices and Common Mistakes
A practical checklist you can apply to your very next transfer.
Before You Create a Transfer
Enable the API and confirm roles
Make sure the project has the service enabled and that the creator has the permissions needed for transfers and for the destination dataset.
Choose dataset location deliberately
Think about compliance, joins with other data and where the source is stored before creating the dataset.
Pick the owner identity
Prefer a dedicated service account where the connector supports it.
Read the connector page
Note launch stage, maximum history, refresh behavior, schedule limits and any known data delays.
After You Create It
Run once and reconcile
Trigger a manual run and compare totals with the source for the same date.
Turn on notifications
Send failures somewhere a person will actually see them.
Backfill the history you need
Use a small test range first, then the full range in sensible chunks.
Document the pipeline
Record owner, schedule, location, contacts and recovery steps in a place the team can find.
Mistakes Seen Again and Again
Using a personal account as the owner, then being surprised when transfers fail after a staff change.
Assuming Preview connectors carry the same guarantees as generally available ones.
Reading incomplete recent data as final and publishing it in executive reports.
Ignoring time zone and day-boundary differences, then spending days chasing small mismatches.
Skipping notifications and freshness checks, which turns every failure into a surprise.
18Real-World Scenarios
Four realistic situations showing how the pieces fit together.
Scenario 1: A marketing team unifies ad performance
A company runs campaigns on several advertising platforms. Using transfers for each platform, daily performance data lands in one dataset. Scheduled queries standardize campaign names and compute cost per result, and a dashboard reads the curated table. Because the platforms revise recent numbers, the team enables a refresh window so the last few days are re-read on every run.
Scenario 2: An online store reconciles payments and orders
A retailer loads order data from its commerce platform and payment data from its payment provider. A scheduled query joins them each morning and highlights orders without matching payments. Finance reviews only the exceptions instead of scanning thousands of rows.
Scenario 3: A migration from another warehouse
An organization moving from another data warehouse uses a database connector to copy tables into BigQuery, runs both systems in parallel for a few weeks and compares results. Once numbers match consistently, reports are repointed to BigQuery and the old system is retired.
Scenario 4: Partner files arriving at unpredictable times
A logistics business receives shipment reports from partners in a bucket at irregular hours. An event-driven transfer loads each file as it arrives, and a scheduled query refreshes a delivery-status table shortly after, so customer support always sees recent information.
flowchart LR
A["Ad platforms"] --> R["Raw dataset"]
B["Commerce and payments"] --> R
C["Partner files in bucket"] --> R
R --> Q["Scheduled queries"]
Q --> K["Curated dataset"]
K --> L["Dashboards and analysts"]
R --> N["Notifications and freshness checks"]
19Inside a Load: Staging, Tables and Schemas
What actually happens to the data between the source and the final table.
From Raw Records to BigQuery Tables
When a run reads data from a source, it does not simply pour rows straight into your final table. The service first gathers the data, stages it in the destination dataset’s location and then asks BigQuery to load it. This two-step approach is familiar to anyone who has moved data before: collect first, then commit. It lowers the chance that a half-finished read leaves a table in a confusing state.
The tables that appear in your dataset are created by the connector. Their names and column lists are decided by the connector’s design, not by you. For reporting sources, you often receive several tables, such as one for campaigns, one for daily performance and one for reference data. For database and storage sources, tables usually mirror the source objects or the destination you name in the configuration.
Think of a grocery delivery. The driver does not place each item directly into your cupboard while still at the store. Everything is first packed into bags, brought to your door, checked and then put away. Staging is the bag-packing step that keeps the cupboard tidy.
Schemas and Surprises
A schema is the list of columns in a table and the type of each column. Source systems change over time: a new field is added, a name is adjusted, or a number that used to be whole starts having decimals. Some connectors are designed to adapt to additions, while others expect a fixed structure. For file-based sources, the shape of each file matters a great deal, because a file with extra or missing columns can cause a load to fail or to place values in unexpected columns.
Assuming the source will never change shape. Keep a simple habit of reviewing connector release notes and checking column lists after any large source upgrade.
Write Behavior: Replace, Append or Update
Each time a run lands data, one of a few things can happen to the target table. The data may be appended to what is already there, it may replace the table, or it may replace only a specific date partition. Which one applies depends on the connector and sometimes on a setting you choose when creating the transfer. Understanding this is important for safe backfills and for avoiding duplicate rows.
| Behavior | What It Means | Good For | Risk |
|---|---|---|---|
| Append | New rows are added after existing rows | Event logs and files that only ever grow | Duplicates if the same slice is loaded twice |
| Replace table | The whole table is rewritten each run | Small reference tables that are fully re-read | Costly for big tables, and history can disappear |
| Replace partition | Only the date slice being loaded is rewritten | Daily reporting data with refresh windows | Wrong date boundaries can overwrite good data |
Partitioning and Clustering on Landing Tables
Partitioning divides a large table into smaller date-based pieces so that queries read only the pieces they need. Clustering sorts data inside those pieces by chosen columns so filters become cheaper. Many reporting connectors create date-partitioned tables for you. For tables you manage yourself, such as curated outputs from scheduled queries, you should choose partitioning and clustering on purpose, because they strongly influence both speed and cost.
Partition by date
Date is the most common filter in reports, so it is the most useful dividing line.
Cluster on filter columns
Choose columns that analysts filter on often, such as account or campaign identifiers.
Set expirations on raw data
Decide how long raw copies are useful and let old partitions expire automatically.
Require partition filters
Where appropriate, require queries to include a date filter to prevent accidental full scans.
flowchart TD
A["Connector reads source slice"] --> B["Data staged in dataset location"]
B --> C{"Write behavior"}
C -->|Append| D["Rows added to table"]
C -->|Replace partition| E["One date partition rewritten"]
C -->|Replace table| F["Whole table rewritten"]
D --> G["Run marked succeeded"]
E --> G
F --> G
20Setting Up Your First Transfer: A Walk-Through
The full journey from an empty project to a working, monitored pipeline.
Reading about a service is useful, but nothing beats understanding the exact order of actions. This walk-through is written for the Google Cloud console, but the same ideas apply to the command line and the API. We will use a typical scenario: loading daily files from a storage bucket into a reporting dataset.
Prepare the project
Select or create a project, make sure billing is attached, and enable the BigQuery and BigQuery Data Transfer APIs. Enabling the transfer API also creates the service agent that does background work for you.
Create the destination dataset
Choose a clear name and a deliberate location. Add a description that says which pipeline owns the dataset, so future teammates know where its tables come from.
Prepare the identities
Create a dedicated service account for the pipeline. Grant it read access to the source and write access to the destination dataset, and give the person creating the transfer permission to use it.
Open the transfers page and choose a source
In BigQuery, find the data transfers area and create a new transfer. Select the data source type that matches your situation, such as cloud storage.
Fill in the source settings
Provide the location of the files, the pattern that selects them, the file format and the destination table name. Review options about header rows, skipped bad records and write behavior.
Set the schedule and notifications
Choose how often the transfer runs and at what time, and configure email or Pub/Sub notifications for failures.
Save, run once and reconcile
Start a manual run, watch it complete, and compare row counts and totals with the source files.
Backfill and document
Load needed history, then write down owner, schedule, location and recovery steps.
Build your first transfer in a sandbox project with a small amount of data. Make your mistakes where they cost nothing, then repeat the steps in production with confidence.
Setting Up Through Automation
Once a transfer works in the console, many teams capture the same configuration as code so it can be reviewed, versioned and recreated. Because the service has a public API, infrastructure tools can create and update transfers, and scripts can trigger runs and read history. The benefit is not speed but repeatability: when a project must be rebuilt or cloned for another environment, the transfer comes with it rather than depending on someone’s memory of console clicks.
21Connector Families in Practice
How each group of sources behaves, and what to expect from each.
Cloud Storage Sources
Storage connectors load files from Cloud Storage, Amazon S3 and Azure Blob Storage. You describe where the files live and which ones to pick up, usually through a path with a pattern. The service handles authentication, pattern matching and loading. Typical issues include files with inconsistent columns, partially uploaded files, and patterns that accidentally match too much or too little.
What to design carefully
Agree on naming rules for files, ensure producers upload completed files only, and keep a clear folder structure by date so patterns are simple and safe. For cross-cloud sources, remember that the other provider may charge for data leaving its network.
Database and Warehouse Sources
These connectors are mostly used for migration and recurring replication of tables from systems such as other warehouses and relational databases. They often require network access between Google Cloud and the source, which means firewall rules, private connectivity or a small helper component near the source depending on the connector. Plan time for networking and security reviews, because this is where setup usually takes the longest.
What to design carefully
Decide whether you are doing a one-time migration or ongoing copies, measure the volume to be moved, schedule loads outside the source’s peak business hours, and validate row counts and key columns after each major load.
Google Marketing and Analytics Sources
Connectors for advertising, analytics and app platforms load reporting data produced by Google products. They usually need an identity that has access to the account being read, and they land standard report tables. Because these platforms revise recent days, the refresh window concept is especially important here.
What to design carefully
Make sure the owner identity has access to every account you want, keep a list of account identifiers per transfer, and document which report tables are produced so analysts know where to look.
SaaS, Marketing and Payment Platforms
Connectors for customer, marketing and payment platforms read data through each vendor’s interface. They are subject to that vendor’s rate limits and availability. Many of these connectors have carried Preview status, so treat their documentation as the source of truth for fields, limits and support terms.
What to design carefully
Expect throttling on large initial loads, run history backfills in smaller chunks, and always compare a few headline totals against the vendor’s own dashboard after setup.
graph LR
A["Cloud storage files"] --> DTS["Data Transfer Service"]
B["Databases and warehouses"] --> DTS
C["Google marketing and analytics"] --> DTS
D["SaaS and payments"] --> DTS
DTS --> BQ["BigQuery datasets"]
22Data Quality, Reconciliation and Governance
Making sure the numbers in the warehouse deserve the trust people place in them.
Why Loading Successfully Is Not Enough
A run that finishes with a green status only tells you that the mechanics worked. It does not tell you that the numbers are right. A source might have returned an empty slice because of a temporary problem, an account might have been removed from the connection, or a filter might have excluded most rows. Reliable teams add checks that look at the data itself.
Row count sanity
Compare today’s row count with a recent average and warn when it drops or jumps sharply.
Freshness
Verify the newest date in each table is as recent as the schedule promises.
Totals against source
Periodically compare a few headline numbers with the source’s own report.
Duplicates and nulls
Check that identifiers are unique where they should be and that key columns are not empty.
Schema drift
Alert when columns are added, removed or change type unexpectedly.
A delivery driver reporting “package delivered” does not mean the right package arrived in good condition. Data checks are the person who opens the box and compares it with the order slip.
Governance Basics
As the number of transfers grows, governance keeps things understandable. This does not need heavy bureaucracy. A few light rules go a long way.
Naming conventions
Use a consistent pattern that includes the source, the purpose and the environment, so anyone can read a transfer name and know what it does and where it belongs.
Ownership records
Keep a short register listing each pipeline, its business owner, technical owner, schedule, location and the people to contact during an incident.
Labels and descriptions
Apply labels to datasets and descriptions to tables so cost reports and data catalogs can be grouped by team and purpose.
Access reviews
Review who can edit transfers and who can read raw datasets on a regular schedule, and remove access that is no longer needed.
Some sources contain personal or financial information. Decide before loading which columns are truly needed, restrict access to the raw landing area, and follow your organization’s retention and privacy rules from the first day, not after an audit.
23Operating Transfers at Scale
What changes when you go from three transfers to three hundred.
Small setups are forgiving. Large ones are not. When many teams share a platform, small inconsistencies multiply into real operational pain. The ideas below keep a growing estate manageable.
Structure Your Projects and Datasets
Separate projects by environment and, when needed, by business domain. Within a project, keep raw landing datasets apart from curated ones. This structure makes it easy to give analysts access to curated data only, and to measure costs per domain.
Standardize Through Templates
If every team invents its own approach, support becomes impossible. Create a small set of approved patterns, such as “daily reporting source with refresh window” or “partner file drop with event trigger,” and publish a short guide for each. A template is not a restriction; it is a head start that already includes the right owner identity, notifications and checks.
Plan for Quotas and Limits
Review documented limits on the number of configurations and the rate of requests, and combine similar transfers where the connector allows. Stagger schedules so that hundreds of runs do not all start at the same minute and compete for source capacity.
Prepare Runbooks
A runbook is a short document that says what to do when something goes wrong. For transfers, a good runbook contains where to look first, how to restore authorization, how to run a backfill safely, whom to inform and how to confirm recovery.
Detect
A notification or freshness alert tells you something is wrong.
Diagnose
Open the failed run, read its messages and walk from access issues to data issues.
Repair
Fix the credential, permission, network or configuration cause.
Recover
Backfill the missed dates and verify counts against the source.
Learn
Record what happened and add a check so the same problem is caught earlier next time.
flowchart LR
A["Alert fires"] --> B["Open failed run"]
B --> C{"Access problem?"}
C -->|Yes| D["Fix identity or role"]
C -->|No| E{"Source or data problem?"}
E -->|Source| F["Wait or contact vendor"]
E -->|Data| G["Fix config or schema"]
D --> H["Backfill missing dates"]
F --> H
G --> H
H --> I["Verify and close"]
24Migration Playbook and Industry Examples
How organizations use DTS during warehouse moves, and how different industries apply it.
A Safe Migration Pattern
Moving to BigQuery from another warehouse is not only a technical copy. It is a change that affects every report. The safest approach runs old and new systems side by side for a period, compares results and moves consumers gradually.
Inventory
List tables, volumes, owners and the reports that depend on them. Decide which tables are truly needed.
Pilot
Move a small, important subject area first and use it to learn about networking, permissions and timing.
Load and validate
Run bulk loads, then compare row counts and key totals between old and new systems.
Parallel run
Keep both systems updated on a schedule while report owners compare outputs.
Cut over and retire
Repoint consumers, keep a rollback window, then retire the old system once confidence is high.
How Different Industries Use It
Retail and e-commerce
Retailers combine order data, advertising spend and payment records to measure true profit per campaign and to spot orders with payment problems quickly.
Media and publishing
Publishers bring together audience analytics, advertising revenue and content platform reports to learn which stories earn the most per reader.
Software as a service
Software companies join product usage with customer relationship and billing data to understand which behaviors predict renewal or churn.
Mobile apps and games
App publishers combine store reports, install campaigns and in-app analytics to measure the cost of acquiring each valuable user.
Financial and operations teams
Finance groups load payment, billing and ticketing data to reconcile revenue and to track service levels with a single trusted source of numbers.
In every industry the pattern is the same: bring separate systems into one place on a schedule, clean them once with shared logic, and let everyone read the same answer.
25A Complete Reference Architecture
Putting every idea from this guide into one coherent picture.
Let us combine everything into a single design for a mid-sized company that wants a trustworthy daily reporting platform. The company has advertising accounts, an online store, a payment provider and partners who drop files into a bucket. The goals are simple: fresh numbers every morning, no manual loading, safe access for analysts and quick recovery when something breaks.
Layer One: Landing
Each source has its own transfer, owned by its own service account. All transfers write into raw landing datasets inside a single, deliberately chosen location. Raw data is never edited and is kept for a defined period. Analysts have no access here; only the pipeline owners do.
Layer Two: Cleaning
Scheduled queries read the raw tables, standardize names, fix types, remove obvious duplicates and join related sources. They run at a safe gap after ingestion and write to a cleaned dataset with date partitioning and clustering chosen to match the way people filter data.
Layer Three: Curated
More scheduled queries build business-ready tables such as daily revenue, campaign performance and delivery status. A dataset copy can publish these tables to a separate reporting project, where analysts and dashboards have read-only access. This keeps experiments away from production data.
Layer Four: Observability
Every transfer sends failure notifications to a shared channel. A small set of scheduled checks measures freshness, row count sanity and key totals, and writes results to a monitoring table that a dashboard displays. A runbook explains exactly what to do for each type of alert.
flowchart TD
subgraph Sources
S1["Ad accounts"]
S2["Online store"]
S3["Payment provider"]
S4["Partner files"]
end
S1 --> T["Transfers with dedicated service accounts"]
S2 --> T
S3 --> T
S4 --> T
T --> RAW["Raw landing datasets"]
RAW --> CLEAN["Scheduled queries: cleaned datasets"]
CLEAN --> CUR["Scheduled queries: curated datasets"]
CUR --> COPY["Dataset copy to reporting project"]
COPY --> BI["Dashboards and analysts"]
T --> MON["Notifications and freshness checks"]
CLEAN --> MON
CUR --> MON
This design works like a restaurant supply chain. Ingredients arrive at the loading dock (landing), get washed and chopped in the prep area (cleaning), are cooked into finished dishes (curated), and are served through the dining room window (reporting). A manager with a checklist (observability) watches every stage.
| Layer | Who Can Access | Main Tool | Main Risk It Controls |
|---|---|---|---|
| Landing | Pipeline owners only | Transfers | Accidental edits to raw truth |
| Cleaning | Data engineers | Scheduled queries | Inconsistent names and types |
| Curated | Analysts read-only | Scheduled queries and dataset copies | Conflicting business logic |
| Observability | Data team and on-call staff | Notifications and checks | Silent failures and stale numbers |
26A Practical Adoption Roadmap
A realistic plan for introducing DTS into a team over the first month.
Adopting a new service works best in small, safe steps. The roadmap below is deliberately modest. Each week ends with something that works and can be shown to colleagues, which builds trust and keeps motivation high.
Week one: learn and sandbox
Create a sandbox project, enable the APIs, build one transfer from a simple source and watch several scheduled runs succeed. Read the documentation page for your chosen connector fully.
Week two: secure and monitor
Move to dedicated service accounts, add notifications, and write the first freshness check. Agree on dataset locations and naming rules with your team.
Week three: shape and publish
Create scheduled queries that clean the raw data and build one curated table. Share it with a small group of analysts and gather feedback on usefulness and accuracy.
Week four: harden and document
Practice a backfill on purpose, write the runbook, capture configurations as code and review costs. Present results and plan the next sources.
Deliberately revoke a permission in the sandbox, watch the failure notification arrive, then fix the cause and run a backfill. A team that has rehearsed recovery once handles real incidents calmly.
Skills Worth Building Alongside
SQL fluency
Scheduled queries are only as good as the SQL inside them, so clean, readable queries pay off every day.
IAM understanding
Most transfer problems are access problems, so knowing roles, service accounts and impersonation saves hours.
Data modeling
Good table design in the cleaned and curated layers makes dashboards simpler and cheaper.
Operational thinking
Alerts, runbooks and post-incident learning turn a working pipeline into a dependable one.
27Plain-English Glossary and Quick Reference
Every important term from this guide, defined in one or two simple sentences.
Connector
A prebuilt adapter that knows how to read one specific kind of source and map its data into BigQuery tables.
Dataset
A container inside BigQuery that holds tables and views and has its own location and access rules.
Service account
A non-human identity used by applications and pipelines so they do not depend on any one person.
Impersonation
Acting as another identity, with permission, to obtain access tokens on its behalf.
Pub/Sub
A messaging service where publishers send messages to topics and subscribers receive them through subscriptions.
Partition
A slice of a table, usually by date, that lets queries read only the data they need.
Clustering
Sorting data inside a table or partition by chosen columns to make filters cheaper and faster.
Slot
A unit of BigQuery compute capacity used to run queries and jobs.
Reservation
A purchased block of slots that can be assigned to projects, folders or organizations for predictable capacity.
Preview
A launch stage where a feature is available for use but may have fewer guarantees and can change.
Runbook
A short written guide describing exactly what to do when a known type of problem occurs.
Least privilege
The security habit of granting only the permissions that a task truly needs, and no more.
Common Misunderstandings Cleared Up
“A green run means my numbers are correct”
A successful run proves the mechanics worked, not that the content is complete or accurate. Pair every transfer with checks on row counts, freshness and headline totals, and compare against the source periodically.
“Scheduled queries wait for my transfers”
They run on their own clock. If a query starts before ingestion finishes, it reads yesterday’s picture of the data. Leave a comfortable gap, or coordinate the order with a workflow tool when timing is strict.
“Any owner identity works equally well”
Personal accounts break when people move on or revoke consent. Dedicated service accounts, where supported, keep pipelines steady and make permissions easier to review.
“Moving the dataset later is easy”
Location is chosen when a dataset is created, and relocating data afterwards takes planning, copying and validation. Decide location early with compliance and joins in mind.
“More frequent schedules always mean fresher data”
A source that publishes final numbers once a day cannot be made fresher by polling it constantly. Extra runs only add load, noise and quota pressure.
A Short Pre-Launch Checklist
Before declaring any new transfer finished, walk through these questions with a teammate. If any answer is unclear, pause and resolve it first; ten minutes of review now prevents days of confusion later.
Who owns it?
A named business owner, a named technical owner and a dedicated service account are recorded in the register.
How do we repair it?
The runbook explains authorization fixes, safe backfills and who must be informed when history changes.
How will we know?
Failure notifications reach a monitored channel and freshness checks exist for every destination table.
Is the data allowed here?
Location, retention and access rules match organizational policy, and sensitive columns are limited to what is needed.
One-Page Decision Guide
| If You Need To… | Reach For |
|---|---|
| Load data from a supported source on a schedule | A transfer configuration with the matching connector |
| Fill a gap after an outage | A backfill for the affected dates |
| Load files as soon as they arrive in a bucket | An event-driven transfer with bucket notifications |
| Summarize or clean data every day | A scheduled query |
| Publish tables to another project or backup a dataset | A dataset copy |
| Keep transfers independent of staff changes | A dedicated service account as owner |
| Know quickly when something fails | Notifications plus freshness checks |
| Stream or transform rows in flight | A more flexible service such as a streaming or pipeline tool |
The official documentation for each connector is the most reliable place for current limits, launch stages and field lists. Bookmark the pages for the sources you use and review them whenever you plan a change.
28Frequently Asked Questions
No. It is designed to bring data into BigQuery. Exporting data out of BigQuery uses other mechanisms such as export jobs or other services.
Not for normal use. You configure transfers through forms in the console, or through the command line or API if you prefer automation. The connectors themselves are maintained by Google.
No. It works in scheduled batches, with event-driven triggering available for Cloud Storage files. For continuous change capture or streaming, look at services built for that purpose.
The run is marked failed in run history with messages explaining what happened, and notifications can alert you. After you fix the cause, you can start a backfill for the affected dates.
Yes, through a backfill, within the limits of how much history the source makes available. Check the connector’s documentation for the maximum range.
A dedicated service account is the better choice wherever the connector supports it, because it does not depend on any one person. Some sources still require a user account.
Google publishes a data delivery objective for scheduled transfers from sources within Google Cloud. It does not apply to transfers from non-Google Cloud sources, because those depend on outside systems.
In the same location as the destination dataset. The transfer configuration takes that location too.
It depends on the connector, so check the official pricing page for your source. After loading, normal BigQuery storage and query costs apply, and the source provider may charge separately for exports or egress.
Not necessarily. Some are labeled Preview at different times. Review each connector’s launch stage and terms before depending on it for critical reporting.
Yes, through scheduled queries, which run on the same service. They are separate from source connectors, so you load first and then transform.
Common reasons are recently revised data, differences in how a day is defined across time zones, and reading data before the source finished processing. A refresh window and a consistent day convention usually fix this.
29Summary and Key Takeaways
The BigQuery Data Transfer Service turns the repetitive, error-prone work of loading data into a managed routine. You describe a source, a destination dataset and a schedule once, and Google runs the transfers, records every run and helps you recover with backfills. Alongside external sources, the same engine powers scheduled queries and dataset copies, giving small teams a complete rhythm for ingesting, shaping and publishing data. Success depends less on clever configuration and more on a few steady habits: choose locations carefully, use dedicated service accounts, watch freshness, and always test with one run before trusting a schedule.
Key Takeaways
- Managed ingestion — DTS automates scheduled loads into BigQuery from supported SaaS, advertising, storage, cloud and database sources, with no pipeline servers to run.
- Configuration versus run — a transfer configuration is the saved recipe, and each execution is a run with its own status and history.
- Backfills heal gaps — fix the root cause, test one day, then reload past dates within the limits the source allows.
- Location follows the dataset — the destination dataset decides where the transfer is configured, staged and processed, so choose it early.
- Prefer service account owners — they survive staff changes, support least privilege and are easier to audit than personal accounts.
- Watch freshness — combine run history, notifications and table freshness checks so silent failures never reach decision makers.
- Know the boundaries — it is batch-oriented and inbound only; choose other services for streaming, deep transformation or unsupported sources.