PDE Designing Data Processing Systems Practice Question
You need to create a BigQuery table that stores customer transaction data. The table will be queried frequently by a customer_id column to retrieve recent transactions (last 30 days). Which table design optimizes query performance and cost?
⚠ Common exam trap
PDE often tests the misconception that the most selective column (customer_id) should be the partition key, when the correct rule is that the partition column must match the time-based filter predicate to enable pruning.
Answer choices
Why each option matters
Answer the question above first, then reveal the full breakdown to understand why each option is right or wrong.
Correct answer & explanation
✓
Partition by transaction_date and cluster by customer_id
Partitioning by transaction_date aligns with the query filter (last 30 days), so BigQuery prunes all partitions outside that window, scanning only the relevant date range. Clustering by customer_id then sorts data within each partition, so the customer_id filter benefits from block-level pruning. This combination minimizes both bytes scanned (cost) and query latency.
Answer analysis
Option-by-option breakdown
For each option: why learners choose it and why it is or isn't the right answer here.
- ✗
Partition by customer_id and cluster by transaction_date
Why it's wrong here
Partitioning by customer_id creates huge partition counts and cannot prune a date range, so last-30-days queries scan every customer partition. Customer_id partitioning suits lookups for one specific customer across all history, not time-bounded scans across many customers.
- ✗
Partition by ingestion_time and cluster by customer_id
Why it's wrong here
Partitioning by ingestion_time prunes on load time, not transaction_date, so a last-30-days filter scans every partition. Ingestion-time partitioning suits queries scoped to when data arrived, such as auditing pipeline runs, rather than filtering on a business date column.
- ✗
Cluster by transaction_date and customer_id without partitioning
Why it's wrong here
Clustering alone cannot prune the last 30 days; every query scans all partitions unless a partition column filters data. Clustering suits high-cardinality filtering within a partition, so it would be correct if queries filtered on customer_id without a date range restriction.
- ✓
Partition by transaction_date and cluster by customer_id
Why this is correct
Partitioning on transaction_date lets queries prune to the last 30 days, and clustering on customer_id sorts data within each partition so lookups scan far fewer bytes. Together they cut both query latency and bytes-billed cost for the stated access pattern.
Go deeper
Related to this question
About these practice questions
Courseiva writes every PDE question from scratch — 747 in total, each with an explanation and a wrong-answer breakdown. None are copied from real exams or dumps. Learn why practice questions differ from exam dumps →
JA
Written and reviewed by Johnson Ajibi, MSc IT Security
Senior Network & Security Engineer · founder of Courseiva
Last reviewed September 2026 · checked against the official Google Cloud exam blueprint
This PDE practice question is part of Courseiva's free Google Cloud certification practice question bank. Courseiva provides original exam-style practice questions with explanations, topic-based practice, mock exams, readiness tracking, and study analytics to help learners prepare for the PDE exam.