Welcome to your first major challenge at Startup, Inc.! Dr. Gru needs the next big opportunity to invest in. You're going to pick a big public dataset, ask three sharp questions a business owner or CEO would ask, and answer them with SQL in a Colab notebook. Along the way you'll also hand-draw two debug tables on paper to trace how your queries actually execute, row by row. More on that below.
Past favorites: COVID-19 spread, StackOverflow users, GitHub repos, NYC taxi tips, crypto blockchain, climate change, election ads.
Ambitious example: one student asked "When is the best time to get away with murder?" and joined Chicago crime (1.3 GB), EPA temperature (1.8 GB), and GDELT news (204 GB). Dataset scale on its own isn't graded, but that level of curiosity tends to produce the best projects.
SELECT table_id, row_count, size_bytes FROM `your_dataset.__TABLES__` (or INFORMATION_SCHEMA.TABLE_STORAGE)..ipynb to Gradescope, due Oct 16.A check for yourself: could you walk a friend through each query with the chat window closed? If not, rewrite the query.
#project1 announcements.cs145_project1_template_fa26.ipynb in the
course Drive folder. Pre-structured with section
headers, the TOC, debug-table placeholders, and BigQuery auth scaffolding.Three weeks of work, roughly paced to the class lectures. Basic SQL lands in Week 1. Intermediate SQL (CTEs, window functions, subqueries) arrives by Week 2. Each week has a punchline; the rest is detail. Jot AI surprises as they happen.
4 to 5 hours · explore and schema
Pick a dataset that actually excites you. Confirm it meets the 500 MB / 3-table bar.
Star it in the BigQuery console. Sketch 3 draft questions. Run a handful of
SELECT … LIMIT 20 probes to learn the schema.
7 to 8 hours · CTEs, subqueries, joins
Answer your 3 questions with JOINs, CTEs, and correlated subqueries. Most of the 10-query requirement lands here. Keep noting AI surprises, especially the times AI got something wrong and you caught it.
5 to 7 hours · windows, debug tables, submit
Add the 3 window queries, including the RANK vs. ROW_NUMBER comparison. Hand-draw your two debug tables (one window function, one correlated subquery), photograph them, embed them. Write the AI Takeaways section. Make sure every cell has run with output, TOC is visible, and submit to Gradescope.
__TABLES__ or INFORMATION_SCHEMA) in the notebook, not just asserted.OVER(...), including a RANK vs.
ROW_NUMBER comparison.Two hand-drawn traces, photographed and embedded in the notebook next to the queries they trace. Shorthand is fine (3 to 5 rows plus "…N more rows"). Show the edge cases that matter.
A short, informal reflection at the end of your notebook: a few real examples of how you used AI on this project, and one query explained in plain English.
COUNT(*)
on each side, and that showed I had joined on the wrong key."Quality work gets 95/100: meet every requirement with working, commented SQL and a clean notebook. This is a high A and what most students should target.
Above 95: CAs will pick the top 5% of submissions in the class, based on quality, for these 5 points.
State it in plain English, specific and decision-worthy: [ACTION VERB] + [SPECIFIC METRIC] + [COMPARISON/CONDITION] + [TIMEFRAME/SEGMENT]. A strong question is one whose answer could change a decision (that earns the 10 question points). The query that answers it earns the 10 join-query points by joining 2+ tables and filtering with WHERE or HAVING.
No. Aim for at least 10 distinct queries: 2 correlated subqueries, 2 CTEs, and 3 window functions, then at least 3 that use 2+ JOINed tables to answer your questions. One query can combine techniques (a CTE with a window in the same SELECT) but counts once, so make sure you end up with at least 10 distinct.
Yes. The 10+ queries are how you answer your 3 questions, not a separate assignment. At least 3 use a JOIN to answer the questions directly; the 2 correlated subqueries, 2 CTEs, and 3 window functions dig deeper into those same questions. Together they are your 10 or more.
Anything with an OVER(...) clause. Plain AVG(col) without OVER
does not count. Example:
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date). To make RANK vs. ROW_NUMBER
differ, order by a non-unique column so ties exist: RANK skips numbers after ties (1,1,3),
ROW_NUMBER doesn't (1,2,3).
10 to 20 rows per query with LIMIT. Show the full summary for aggregations. This is
a SQL-only project. No Python or pandas analysis needed.
Popular BigQuery public datasets that meet the 500 MB and 3-tables bar. These are starting points. The best projects come from genuine curiosity.
bigquery-public-data.stackoverflow
Tables: posts, users, comments, badges. About 50 GB.
bigquery-public-data.new_york_taxi_trips
Tables: yellow and green trips. About 100 GB.
bigquery-public-data.chicago_crime
Tables: crime and socioeconomic data. About 1.5 GB.
bigquery-public-data.github_repos
Tables: commits, files, contents, languages. About 3 TB (use samples).
bigquery-public-data.covid19_*
Regional datasets; varies by region.
bigquery-public-data.noaa_*
Tables: gsod, stations, hurricanes. About 100 GB.
No. Always query public datasets directly by reference
(bigquery-public-data.stackoverflow). Star them in the console for easy access. This is
how you'll work with production data in industry.
Nothing. We use the BigQuery sandbox, which Google provides free: 1 TB of query processing
per month and 10 GB of storage, with no billing account. Project 1 does not come close.
Before running a query, check "This query will process X GB" in the top-right of the console.
On big datasets like GitHub (3 TB), always filter by date, use
TABLESAMPLE SYSTEM (10 PERCENT), and avoid SELECT *: one unfiltered
scan of a 3 TB table would use up a month of free queries. Two sandbox limits to know:
tables you create expire after 60 days, and INSERT/UPDATE/DELETE
are not supported, so query public datasets by reference or build tables with
CREATE TABLE ... AS SELECT.
No LLM credits are provided. Use free tiers: ChatGPT, Claude.ai, Gemini, or GitHub Copilot (free with a student account). Ask focused questions, not "write my whole project." If you hit rate limits, that's a feature. Practice without AI.
A paper debug table is a row-by-row trace of how your SQL executes. It's the same format you saw in the SELECT-FROM-WHERE and debug lessons. You don't trace every row. Use shorthand:
For RANK() on 1000 users, show top 3, ties if any, bottom 2. That's enough to verify logic.
Due Oct 16. Submit to Gradescope:
.ipynb file, all cells run with output visibleThe shape of Project 1: three questions, ten queries, two paper debug tables, and the +5 insight bonus.
A section-by-section tour of the template notebook: where each query lives and where the debug tables go.