📖 Scenario: You work as a data analyst for a retail company. Your manager wants you to analyze sales data stored in Google BigQuery. To keep costs low, you need to understand how BigQuery pricing works and write SQL queries that minimize data scanned.
🎯 Goal: Build a simple BigQuery SQL query to calculate total sales per product category, while considering the pricing model by filtering data efficiently.
📋 What You'll Learn
Create a table variable with sales data including product category and sales amount
Add a filter configuration variable to select a specific product category
Write a SQL query that sums sales amount grouped by product category using the filter
Add a LIMIT clause to restrict the number of rows returned
💡 Why This Matters
🌍 Real World
BigQuery is a cloud data warehouse where you run SQL queries on large datasets. Understanding how to write efficient queries and use filters helps reduce the amount of data scanned, lowering costs.
💼 Career
Data analysts and cloud engineers use BigQuery daily to analyze data. Knowing how to write filtered queries and apply limits is essential to optimize performance and control expenses.
Progress0 / 4 steps
1
Create sales data table variable
Create a BigQuery table variable called sales_data with these exact columns and values: product_category with values 'Electronics', 'Clothing', 'Books', and sales_amount with values 1000, 500, 300 respectively.
GCP
Hint
Use a list of dictionaries to represent the table rows with exact keys and values.
2
Add filter configuration variable
Add a variable called selected_category and set it to the string 'Electronics' to filter sales data by this category.
GCP
Hint
Assign the exact string 'Electronics' to the variable selected_category.
3
Write SQL query to sum sales by category with filter
Write a SQL query string variable called query that selects product_category and the sum of sales_amount as total_sales from sales_data, filtering where product_category equals selected_category, and grouping by product_category.
GCP
Hint
Use an f-string to insert the selected_category variable inside the WHERE clause.
4
Add LIMIT clause to SQL query
Add a LIMIT 1 clause at the end of the query string to restrict the number of rows returned to 1.
GCP
Hint
Append the line LIMIT 1 at the end of the SQL query string.
Practice
(1/5)
1. What does BigQuery charge you for when you run a SQL query?
easy
A. The amount of data scanned by the query
B. The number of SQL commands used
C. The time it takes to write the query
D. The number of tables in your project
Solution
Step 1: Understand BigQuery pricing basics
BigQuery charges based on how much data your query scans, not on commands or tables.
Step 2: Identify the correct pricing factor
The cost depends on the volume of data scanned during query execution.
Final Answer:
The amount of data scanned by the query -> Option A
Quick Check:
Data scanned = cost [OK]
Hint: Remember: BigQuery bills by data scanned, not query length [OK]
Common Mistakes:
Thinking cost depends on query complexity
Assuming storage size affects query cost directly
Confusing number of tables with cost
2. Which of the following is the correct way to write a simple BigQuery SQL SELECT statement?
easy
A. SELECT * FROM dataset.table;
B. GET * FROM dataset.table;
C. FETCH ALL FROM dataset.table;
D. READ * dataset.table;
Solution
Step 1: Recall BigQuery SQL syntax
BigQuery uses standard SQL syntax where SELECT is used to retrieve data.
Step 2: Identify the correct syntax
Only SELECT * FROM dataset.table; uses the correct SELECT statement format with FROM clause.
Final Answer:
SELECT * FROM dataset.table; -> Option A
Quick Check:
SELECT + FROM = correct query [OK]
Hint: SELECT is the keyword to get data in SQL [OK]
Common Mistakes:
Using GET or FETCH instead of SELECT
Omitting FROM keyword
Incorrect command verbs
3. Consider this query: SELECT COUNT(*) FROM `project.dataset.sales` WHERE sale_date >= '2023-01-01'; What will this query return?
medium
A. A list of all sales records from 2023-01-01 onwards
B. The sum of all sales amounts after 2023-01-01
C. The total number of sales records from 2023-01-01 onwards
D. An error because of incorrect date format
Solution
Step 1: Analyze the SELECT clause
COUNT(*) counts the number of rows matching the condition.
Step 2: Understand the WHERE clause
It filters records with sale_date on or after 2023-01-01.
Final Answer:
The total number of sales records from 2023-01-01 onwards -> Option C
Quick Check:
COUNT(*) + WHERE = count filtered rows [OK]
Hint: COUNT(*) counts rows, not sums values [OK]
Common Mistakes:
Confusing COUNT with SUM
Thinking it returns all records instead of count
Assuming date format causes error
4. You wrote this query but it fails: SELECT * FROM dataset.table WHERE date = 2023-01-01; What is the error and how to fix it?
medium
A. Missing semicolon; add ; at end
B. Date value missing quotes; fix with WHERE date = '2023-01-01'
C. Table name incorrect; use backticks around table
D. SELECT * not allowed; specify columns explicitly
Solution
Step 1: Identify the error in WHERE clause
Date literals must be in quotes in SQL; missing quotes cause syntax error.
Step 2: Correct the date format
Enclose date in single quotes: '2023-01-01' to fix the query.
Final Answer:
Date value missing quotes; fix with WHERE date = '2023-01-01' -> Option B
Quick Check:
Date literals need quotes [OK]
Hint: Always quote date strings in SQL WHERE clauses [OK]
Common Mistakes:
Forgetting quotes around dates
Assuming semicolon fixes syntax
Thinking SELECT * is invalid
5. You want to reduce BigQuery costs by limiting data scanned. Which approach is best?
hard
A. Use SELECT * to get all columns for flexibility
B. Run queries without filters to scan all data quickly
C. Store data in multiple small tables instead of one large table
D. Use partitioned tables and filter on partition column in queries
Solution
Step 1: Understand cost drivers in BigQuery
Costs depend on data scanned; scanning less data reduces cost.
Step 2: Identify cost-saving technique
Partitioning tables lets queries scan only relevant partitions, saving cost.
Final Answer:
Use partitioned tables and filter on partition column in queries -> Option D
Quick Check:
Partition + filter = less data scanned [OK]
Hint: Partition tables and filter to scan less data [OK]
Common Mistakes:
Thinking scanning all data is cheaper
Splitting tables without partitioning helps cost
Using SELECT * increases scanned data
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.