Prepare and test your skills
Prepare and test your skills
Aligning GCP services with transformation strategies means matching the location of transformation to the right service. In ETL, data is transformed before it is stored in BigQuery (opens in a new tab), and Dataflow (opens in a new tab) provides that outside compute. In ELT, raw data is loaded into BigQuery first and transformed inside BigQuery afterward. The choice depends on processing needs, storage needs, and whether you want to reduce work inside the warehouse.
Dataflow is the serverless ETL service that transforms and enriches data before the data is stored in BigQuery. Dataflow jobs are defined with the Apache Beam model as graphs of transforms, and the service is fully managed by Google with virtually limitless processing capacity. That capacity matters when on-premises compute and tooling would limit throughput or when enrichment would need extra transfer time and bandwidth.
In a Dataflow ETL flow, data moves from the source system to a staging bucket and then to BigQuery only after transformation:
Choose Dataflow ETL when complex transformation is required before loading, when you have an existing transformation process to preserve, or when you want to reduce resource usage inside BigQuery.
BigQuery is both the storage destination and the transformation engine for ELT, where transformation happens after loading. Raw files are loaded first, and BigQuery then processes that raw data into cleaned tables and meaningful metrics using SQL. This pattern lets proofs of concept and dashboard work start quickly because the raw data is already available for exploration.
In an ELT flow, data moves from the source to Cloud Storage to BigQuery, and transformation runs last inside the warehouse. Common load paths from staging include:
LOAD command with the bq command-line tool and BigQuery API client libraries for batch loadsAfter the raw data becomes loaded, it becomes transformed through scheduled SQL such as Dataform workflows that aggregate clicks, impressions, keywords, or campaign performance into new tables. Choose BigQuery ELT when you want to leverage BigQuery compute and columnar storage for transformation, keep the raw history, and iterate on transformation logic without rebuilding an outside pipeline.
Choosing between the two strategies means comparing transformation location, data flow, and processing fit. ETL with Dataflow keeps heavy work outside the warehouse, while ELT with BigQuery keeps raw data and SQL work inside the warehouse. Cloud Storage is the shared staging dependency in both patterns because BigQuery batch loads, Dataflow reads, and offline or network transfers all land files there first.
A decision tree starting from Cloud Storage staging that branches on whether raw data can land first to choose Dataflow ETL outside BigQuery or BigQuery ELT with SQL transforms.
| Strategy | Transformation location | Data flow | Choose when |
|---|---|---|---|
| ETL with Dataflow | Outside BigQuery in Dataflow | Source to Cloud Storage to Dataflow to BigQuery | Transformations are complex, enrichment is heavy, or warehouse load must be reduced |
| ELT with BigQuery | Inside BigQuery after loading | Source to Cloud Storage to BigQuery to transformed tables | Raw data should land fast and SQL can handle cleaning and aggregation |
If network bandwidth is limited, compress data or use Transfer Appliance for offline transfer. If bandwidth is good, the Google Cloud CLI supports multi-threaded parallel uploads that resume after errors and encrypt traffic in transit.
Exam tip: Use Dataflow when transformation must run before data reaches BigQuery; use BigQuery-native SQL after loading when raw data can land first and be transformed inside the warehouse.
Operational differences between ELT and ETL in GCP center on when and where transformation happens relative to loading. In ELT on Google Cloud, raw data flows first into BigQuery (opens in a new tab) and transformation happens afterward inside BigQuery. In ETL, data is cleaned or reshaped before it is written to BigQuery, using a processing service outside the warehouse.
Data flow order defines the boundary between ELT and ETL at the BigQuery storage boundary. In ELT, data flows from the source system to BigQuery in its raw form through the extract-and-load stage, then SQL statements run inside BigQuery to transform that loaded data so it can be consumed downstream. In ETL, data flows from the source into a transformation service first and only the cleaned result flows into BigQuery.
The boundary decides what BigQuery stores. In ELT, the raw load crosses into BigQuery before any business logic is applied, so BigQuery holds both raw and transformed tables. In ETL, transformation happens before that boundary is crossed, so BigQuery mainly holds the finished, ready-to-use data.
ELT loads into BigQuery separate the load step from the SQL transform step. The load step can use scheduled loads from Cloud Storage (opens in a new tab) to BigQuery, Cloud Storage triggers with functions, Managed Service for Apache Airflow for orchestration, or a pull model that retrieves files using a protocol such as SFTP. If the sources are supported by the BigQuery Data Transfer Service (DTS) directly or through third-party integrations, DTS can replace the extract-and-load pipeline on a scheduled, managed basis.
Choose ELT when the source data can land in BigQuery as-is and the downstream needs can be expressed in SQL after loading. This approach keeps the loading path simple because no separate transformation cluster has to run before the data arrives. It also preserves raw data in the warehouse, so the same loaded tables can be transformed again in different ways later.
ETL transformation before loading changes data before the data moves into its destination. Use a data integration product like Dataflow or Cloud Data Fusion when data must be changed before the move, for example to remove sensitive data or to reorganize the data. Use Managed Service for Apache Airflow when that pre-move work needs workflow orchestration across multiple steps or systems.
Legacy ETL jobs written with open source frameworks such as Apache Hadoop, Apache Spark, or Apache Flink fit this pattern as well. Managed Service for Apache Spark lets those jobs run on fully managed clusters and write directly to BigQuery through the BigQuery connector, which is a Java library built on Hadoop InputFormat and OutputFormat abstractions. In this flow, data moves from the source into the Spark job for processing, then the processed result flows from the job to BigQuery.
Performance, cost, and complexity trade-offs compare warehouse SQL work against separate processing work. ELT relies on BigQuery compute for SQL transforms and on managed loaders such as DTS or Cloud Storage transfers, which automate movement on a scheduled, managed basis and reduce pipeline code to maintain. ETL adds a processing layer before BigQuery, which increases complexity but is required when data cannot land raw for security, regulatory, or structural reasons.
Managed Service for Apache Spark reduces some of that ETL cost and complexity by using many ephemeral clusters instead of one monolithic cluster:
This ephemeral model favors performance isolation and cost control for ETL, since each job gets the size it needs and disappears when finished. ELT favors simplicity and repeatability when raw loads plus SQL are sufficient, while ETL is the better fit when sensitive fields must be stripped, formats must be reorganized, or legacy Spark logic must run before BigQuery storage.
Exam tip: ELT loads raw data into BigQuery first and transforms it later with SQL inside BigQuery, while ETL transforms data with Dataflow, Cloud Data Fusion, or Spark before writing the result to BigQuery.
Assessing suitability based on data volume and complexity means deciding whether to transform data before loading it or after loading it. Extract, transform, load (ETL) transforms data in the source environment or in a processing tool before it reaches the warehouse, while extract, load, transform (ELT) loads raw data first and then transforms it inside the warehouse. On Google Cloud, that choice depends on how much data you have, how unstructured it is, and where you have enough compute to transform it.
ETL and ELT order changes where compute and storage are used across the same three stages. In ETL, data flows from the source system to a transformation engine and only then to BigQuery (opens in a new tab), so BigQuery receives clean, shaped tables. In ELT, data flows from the source system to Cloud Storage (opens in a new tab) and BigQuery first, and transformation happens later inside BigQuery, so BigQuery stores raw data and then processes it.
A typical ELT workflow in BigQuery follows an ordered sequence:
This order matters because the system that performs the transform must have enough capacity for the volume and complexity involved.
ELT in BigQuery is the better fit for high-volume and unstructured data because storage and transformation both scale inside the warehouse. Raw marketing data, click data, and exported files can be loaded first without trimming or enriching them in a smaller on-premises system, and then processed into meaningful metrics with BigQuery compute. Because BigQuery supports large-scale ingestion such as batch loads from Cloud Storage and a columnar model with nested and repeated fields, it can store wide, denormalized datasets that would be slow to reshape before loading.
Transforming in the current environment before loading creates limits that ELT avoids. Available compute capacity and tooling can limit throughput, and enriching data before transfer can require extra transfer time and network bandwidth. ELT avoids that bottleneck by moving the heavy work to Google Cloud, where tools such as Dataform run scheduled SQL transformations directly on the loaded tables.
ETL is a better fit when data volume is manageable and the work is to trim, clean, or enrich data before it reaches BigQuery. This approach is beneficial when a team already has a transformation process in place or wants to reduce resource usage in BigQuery by loading only finished tables. In that case, transformation logic is executed before the data is stored in the data warehouse, and BigQuery receives a smaller, ready-to-query result.
Google Cloud provides fully managed options for building that pre-load transformation:
Choose ETL with one of these tools when the pipeline needs complex enrichment, joins to other systems, or strict shaping before storage, and the source-side compute can handle it.
Matching volume and complexity to the transformation location decides which side can scale for the workload. ETL transforms in the source environment, Dataflow, Cloud Data Fusion, or Spark before BigQuery storage, which fits moderate volume and early trimming. ELT transforms inside BigQuery after raw data is staged in Cloud Storage and loaded, which fits high volume and flexible reprocessing.
| Pattern | Where transform happens | Choose when |
|---|---|---|
| Extract, transform, load (ETL) | In the source environment, Dataflow, Cloud Data Fusion, or Spark before BigQuery storage | Volume is moderate, data needs trimming or enrichment first, or a team wants to limit BigQuery processing |
| Extract, load, transform (ELT) | Inside BigQuery after raw data is staged in Cloud Storage and loaded | Volume is high, data is unstructured or semi-structured, or flexible reprocessing in the warehouse is needed |
To reduce latency for either pattern, create the Cloud Storage bucket close to the source and, when possible, in the same location as the BigQuery dataset. For very large network transfers, use parallel uploads, compression, increased bandwidth, or offline transfer, so the load step does not become the new bottleneck.
Exam tip: Load raw high-volume data first and transform in BigQuery for ELT; transform before BigQuery storage for ETL when you need to trim data early or reuse an existing transformation process.
Extract, Transform, Load (ETL) transforms data before it is stored in BigQuery, while Extract, Load, Transform (ELT) loads raw data into BigQuery first and transforms it afterward inside BigQuery. In ETL, transformation runs outside the warehouse in Dataflow, Cloud Data Fusion, or Spark so BigQuery mainly holds finished ready-to-use data, while in ELT BigQuery holds both raw and transformed tables.
Choose Dataflow for Extract, Transform, Load (ETL) when transformations are complex, enrichment is heavy, or warehouse load must be reduced. Choose BigQuery for Extract, Load, Transform (ELT) when raw data should land fast and SQL can handle cleaning and aggregation, especially for high-volume unstructured or semi-structured data that benefits from scalable storage and compute with nested and repeated fields.
Dataflow Extract, Transform, Load (ETL) moves data from the source system to a Cloud Storage staging bucket to Dataflow for transformation to BigQuery, while BigQuery Extract, Load, Transform (ELT) moves data from the source to Cloud Storage to BigQuery to transformed tables. Cloud Storage is the shared staging dependency in both patterns and should ideally be in the same location as the BigQuery dataset to minimize latency.
A digital marketing agency collects massive daily volumes of unstructured and semi-structured campaign data from various external platforms. The team wants to ingest all raw data into Google Cloud as quickly as possible without creating preprocessing bottlenecks, preserving the raw logs so they can transform them on demand using SQL-based tools like Dataform.
Which data integration strategy should the agency implement?
Last updated