Courseiva

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.

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 →

How Courseiva writes practice questions · Editorial policy

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.