| # Deep Research: Text-to-SQL Training Data for Education Domain |
|
|
| > **Date:** 2026-06-08 |
| > **Goal:** Find existing datasets, proven approaches, and the best path for building a high-quality NL→SQL training set for K-12 school district analytics |
|
|
| --- |
|
|
| ## Part 1: Existing Datasets That Do This Work |
|
|
| ### Tier 1: Large-Scale Text-to-SQL Datasets (General Domain) |
|
|
| These are the big ones. None are education-specific, but they contain transferable patterns. |
|
|
| #### 1. gretelai/synthetic_text_to_sql (HuggingFace) |
| - **Size:** 106K pairs (100K train / 5.8K test) |
| - **Domains:** 100 domains including healthcare, government, education-related |
| - **Complexity:** Basic SQL through window functions, CTEs, multi-joins |
| - **Format:** Each row has: domain, sql_prompt (NL question), sql_context (CREATE TABLE + INSERT), sql (answer), sql_explanation |
| - **License:** Apache 2.0 |
| - **Why it matters:** This is THE standard dataset people use to fine-tune text-to-SQL models. Rubrik/Predibase used it to fine-tune Llama-3-8B to outperform GPT-4 on SQL tasks. |
| - **Relevance:** HIGH — contains the SQL patterns (aggregation, joins, GROUP BY, CASE WHEN, HAVING, window functions) you need. But the schemas are generic, not education-specific. |
| - **How to use:** Filter for domains closest to education, then combine with your own education-specific pairs. |
|
|
| #### 2. NumbersStation/NSText2SQL (HuggingFace) |
| - **Size:** 289K pairs |
| - **Sources:** 26 different public datasets merged (Spider, CoSQL, SparC, WikiSQL, etc.) |
| - **Format:** instruction (schema + question) → output (SQL) |
| - **License:** Various (curated from permissive sources) |
| - **Why it matters:** Largest merged text-to-SQL corpus. Contains course/student/enroll schemas from Spider that are closest to education. |
| - **Relevance:** MEDIUM — has some education-adjacent schemas (courses, enrollment, professors) but not K-12 specific. |
|
|
| #### 3. OmniSQL / SynSQL-2.5M (HuggingFace + GitHub) |
| - **Size:** 2.5 MILLION pairs across 16,575 schemas |
| - **Approach:** LLM generates schemas, then synthesizes NL questions + SQL |
| - **Paper:** VLDB 2025 |
| - **Why it matters:** First million-scale text-to-SQL dataset. Their synthesis pipeline is open-source — you could adapt it for education schemas. |
| - **Relevance:** MEDIUM — the pipeline (schema → question → SQL → validation) is exactly what you need to replicate for education. |
|
|
| #### 4. SQaLe (trl-lab/SQaLe-text-to-SQL-dataset) |
| - **Size:** 517K validated triples from 135,875 schemas |
| - **Approach:** Start with real schemas from SchemaPile, extend with LLM, generate questions from Spider/BIRD examples, validate via execution |
| - **Why it matters:** Proves that schema-variety matters more than raw volume. 135K schemas beat datasets with 10x more pairs on fewer schemas. |
| - **Relevance:** MEDIUM — methodology is spot-on, but no education schemas specifically. |
|
|
| #### 5. Spider + BIRD Benchmarks |
| - **Spider:** 10K questions, 200 databases, 138 domains. Used as the standard benchmark. |
| - **BIRD:** 12K questions, 95 databases. Focuses on real-world noisy data. |
| - **Why they matter:** These define what "good" looks like. Every serious text-to-SQL paper benchmarks against them. |
| - **Relevance:** LOW for direct use (small, no education focus), but HIGH for understanding what evaluation metrics matter. |
|
|
| ### Tier 2: Education-Specific Raw Data (No NL→SQL Pairs) |
|
|
| These have the DATA but not the training pairs. You'd need to generate NL→SQL from them. |
|
|
| #### 6. Kaggle: Student Performance Data Set |
| - **Source:** UCI ML Repository, 2 Portuguese schools |
| - **Size:** 649 students, 33 columns |
| - **Columns:** grades (G1, G2, G3), demographics (sex, age, address), parental education, study time, failures, absences, social factors |
| - **License:** CC0 Public Domain |
| - **Relevance:** HIGH — closest to your use case. Grades + demographics + attendance. But it's flat (one table), not normalized like a real SIS. |
|
|
| #### 7. Kaggle: Sample Highschool Database |
| - **Source:** Student project |
| - **Size:** 1,000 students |
| - **Format:** SQL database file |
| - **Relevance:** MEDIUM — has normalized tables but limited scope. |
|
|
| #### 8. California Department of Education (CDE) Downloadable Data |
| - **URL:** https://www.cde.ca.gov/ds/ad/downloadabledata.asp |
| - **Data:** Enrollment, demographics, test scores, graduation rates, discipline, absenteeism, staff, financials — all at school/district/county/state level |
| - **Format:** CSV files, updated annually |
| - **License:** Public (CA government data) |
| - **Relevance:** VERY HIGH — this is REAL data from the exact domain you serve. You could build a realistic seed database from CDE data and generate NL→SQL pairs against it. |
|
|
| #### 9. NCES (National Center for Education Statistics) DataLab |
| - **URL:** https://nces.ed.gov/datalab/ |
| - **Data:** National education data, PowerStats tool |
| - **Relevance:** HIGH — federal-level education data, complementary to CDE. |
|
|
| #### 10. Ed-Data.org |
| - **URL:** https://www.ed-data.org/ |
| - **Data:** CA school/district profiles, financial data, test scores |
| - **Relevance:** HIGH — partnership of CDE + EdSource, already structured for queries. |
|
|
| --- |
|
|
| ## Part 2: Proven Approaches for Generating NL→SQL Training Data |
|
|
| ### Approach A: Template-Based (What You're Doing Now) |
|
|
| **How it works:** Write SQL templates with placeholders, parameterize with real values, generate NL from templates. |
|
|
| **Pros:** |
| - 100% accurate SQL (you write it) |
| - Cheap, fast, deterministic |
| - Full control over coverage |
|
|
| **Cons:** |
| - Questions feel synthetic/stilted |
| - Limited by your imagination |
| - Hard to scale past ~2K pairs without exhaustion |
| - Doesn't train for ambiguity, typos, or real-world messiness |
|
|
| **Your current state:** 1,289 pairs from 32 templates. Good start, but ceiling is ~2K. |
|
|
| ### Approach B: LLM-Augmented Synthesis (Recommended Next Step) |
|
|
| **How it works:** Use a powerful LLM (GPT-4, Claude, Qwen-72B) to generate NL→SQL pairs from your schema. |
|
|
| **Proven by:** |
| - OmniSQL (2.5M pairs via LLM synthesis) |
| - SQaLe (517K pairs via LLM + validation) |
| - SING-SQL (Bilkent University, 2025) — specifically designed for single-database in-domain training |
|
|
| **The SING-SQL pipeline is the most relevant to your case:** |
| 1. Take your database schema |
| 2. Partition schema into sub-schemas (e.g., attendance-only, grades+demographics, cross-table) |
| 3. For each sub-schema, have LLM generate SQL queries at multiple complexity levels (basic SELECT → aggregation → joins → window functions → CTEs) |
| 4. For each SQL, have LLM generate the NL question |
| 5. Validate: run SQL against real data, check it executes |
| 6. LLM-as-judge: have another LLM verify Q↔SQL match |
| 7. Auto-repair broken queries |
| 8. Balance column coverage (ensure all columns get queried) |
|
|
| **SING-SQL results:** Their 3B model (fine-tuned on synthetic data) hit 82.87% Soft F1 on BIRD — beating prior 3B baselines by +16 points. |
|
|
| **Pros:** |
| - Scales to 10K-100K+ pairs |
| - Questions sound natural |
| - Covers SQL patterns you wouldn't think of |
| - Validated against real data |
|
|
| **Cons:** |
| - Needs API credits (or local LLM) |
| - Some generated SQL will be wrong (need validation) |
| - May generate SQL for impossible queries |
|
|
| ### Approach C: Hybrid (Best for Your Timeline) |
|
|
| Combine templates for known patterns + LLM for natural variation + real data for seed realism. |
|
|
| **Recommended pipeline:** |
| 1. **Foundation:** Your existing 1,289 template pairs (keep these — they're 100% accurate) |
| 2. **Schema expansion:** Add grades, discipline, demographics, assessments, programs tables |
| 3. **Seed with real data:** Download CDE data, build realistic seed database |
| 4. **LLM augmentation:** Use Qwen2.5-72B (free on Modal or via HF Inference) to generate 5,000 new NL→SQL pairs |
| 5. **Rephrasing:** For each of the 6,000+ pairs, generate 3-5 NL phrasings (formal, casual, abbreviated, typo-prone) |
| 6. **Validation:** Run every SQL against seed data, discard failures |
| 7. **Mix with Gretel:** Filter gretelai/synthetic_text_to_sql for relevant domains (government, healthcare, HR) and add 2,000 pairs as general SQL knowledge |
| |
| **Target:** 15,000-25,000 validated pairs |
| |
| --- |
| |
| ## Part 3: Specific Recommendations for Your Hackathon |
| |
| ### Timeline Reality Check |
| |
| You have until June 15. That's 7 days. Here's what's realistic: |
| |
| | Approach | Pairs | Time | Quality | Recommended? | |
| |---|---|---|---|---| |
| | Templates only (current) | ~2K | Already done | High accuracy, low diversity | Keep as base | |
| | + LLM synthesis (local Qwen-72B or Modal) | +5K | 2-3 days | Medium-high | YES — best ROI | |
| | + Gretel dataset filtered | +2K | 1 day | Medium | YES — free, fast | |
| | + Rephrasing augmentation | ×3-5 | 1 day | Medium | YES — cheap multiplier | |
| | + CDE real data seed | N/A | 1 day | N/A | YES — makes everything more realistic | |
| | Full SING-SQL pipeline | +50K | 2 weeks | High | Too ambitious for hackathon | |
| |
| ### The Playbook (7-Day Plan) |
| |
| **Day 1-2: Schema + Seed Data** |
| - Define 6 new tables (grades, discipline, demographics, assessments, programs, staff) |
| - Download CA Department of Education data files |
| - Build realistic seed database with 10K+ students |
| - Update prompts.py with expanded schema |
| |
| **Day 3: LLM Synthesis** |
| - Use Qwen2.5-Coder-7B (or GPT-4 if you have credits) to generate NL→SQL pairs |
| - Prompt: "Given this DuckDB schema [schema], generate a natural language question and its corresponding SQL query. Complexity: [basic/aggregation/join/window]. Focus on: [table_name]." |
| - Target: 5,000 pairs across all tables |
|
|
| **Day 4: Validation + Filtering** |
| - Run every generated SQL against the seed database |
| - Discard any that fail to execute |
| - Discard any that return 0 rows (unless that's the expected answer) |
| - Verify column references match schema |
|
|
| **Day 5: Rephrasing + Augmentation** |
| - For each validated pair, generate 3-5 NL rephrasings |
| - Add typo variants ("Whats the avg gpa" instead of "What is the average GPA") |
| - Add informal variants ("How are our kids doing on tests?" for assessment queries) |
| - Filter Gretel dataset for relevant domains, add 1,500-2,000 pairs |
|
|
| **Day 6: Train v2** |
| - Update training config: lower LR (1e-4), higher LoRA rank (32), longer seq (4096) |
| - Train on expanded dataset (~15K-20K pairs) |
| - Monitor for overfitting |
|
|
| **Day 7: Evaluate + Deploy** |
| - Test v1 vs v2 on holdout questions |
| - Deploy to HF Space |
| - Smoke test with real-world questions |
|
|
| ### Quick Wins You Can Do Today |
|
|
| 1. **Download Gretel dataset** — it's free, Apache 2.0, and ready to use: |
| ```python |
| from datasets import load_dataset |
| ds = load_dataset("gretelai/synthetic_text_to_sql") |
| # Filter for relevant domains |
| relevant = ds['train'].filter(lambda x: x['domain'] in [ |
| 'education', 'government', 'public health', 'human resources', |
| 'insurance', 'social services', 'nonprofit' |
| ]) |
| ``` |
|
|
| 2. **Download CDE data** — real CA school data: |
| https://www.cde.ca.gov/ds/ad/downloadabledata.asp |
| Key files: enrollment, absenteeism, demographics, test scores, discipline |
|
|
| 3. **Look at OmniSQL's synthesis code** — open source, can adapt for your schema: |
| https://github.com/RUCKBReasoning/OmniSQL/tree/main/data_synthesis |
| |
| --- |
| |
| ## Part 4: What the Kaggle Education Datasets Are (and Why They're Different) |
| |
| You mentioned seeing datasets on Kaggle. Here's what's there and why they're not quite right: |
| |
| | Dataset | What It Is | Why It's Different | |
| |---|---|---| |
| | Student Performance (UCI) | 649 students, flat CSV, Portuguese schools | Raw data, no NL→SQL pairs, foreign schools | |
| | Student Information | 200 students, 7 attributes | Tiny, toy dataset for SQL practice | |
| | Student Exam Performance | Demographics + test scores | Flat analysis dataset, not text-to-SQL | |
| | Sample Highschool Database | SQL file, 1K students | Closer but limited scope, no NL pairs | |
| |
| **The gap:** Kaggle has education DATA but not education TEXT-TO-SQL TRAINING DATA. Nobody has done the work of turning education data into NL→SQL training pairs at scale. That's your opportunity. |
| |
| --- |
| |
| ## Part 5: The Big Opportunity |
| |
| Nobody has built a production-quality text-to-SQL model specifically for K-12 school district analytics. This is a real gap: |
| |
| - **Gretel** covers 100 domains but education is generic |
| - **Spider/BIRD** have no education schemas |
| - **OmniSQL/SQaLe** generate across all domains but not deep on education |
| - **Vanna AI** does RAG-based text-to-SQL but requires you to provide training pairs |
| |
| If you build this dataset well — with real CA education data, realistic schemas, validated NL→SQL pairs covering enrollment, attendance, grades, discipline, demographics, assessments, programs — you'd have something genuinely valuable beyond the hackathon: |
| |
| 1. **Hackathon submission:** Fine-tuned model that does K-12 analytics |
| 2. **Open-source dataset:** First high-quality education text-to-SQL dataset |
| 3. **Product differentiator:** LTC can offer this to CA school districts |
| 4. **Community contribution:** Publish to HuggingFace, get visibility |
| |
| --- |
| |
| ## Appendix: Key Resources |
| |
| ### Datasets |
| | Name | URL | Size | License | |
| |---|---|---|---| |
| | gretelai/synthetic_text_to_sql | huggingface.co/datasets/gretelai/synthetic_text_to_sql | 106K | Apache 2.0 | |
| | NumbersStation/NSText2SQL | huggingface.co/datasets/NumbersStation/NSText2SQL | 289K | Various | |
| | OmniSQL/SynSQL-2.5M | github.com/RUCKBReasoning/OmniSQL | 2.5M | Check repo | |
| | SQaLe | huggingface.co/datasets/trl-lab/SQaLe-text-to-SQL-dataset | 517K | Check paper | |
| | Student Performance (UCI) | kaggle.com/datasets/larsen0966/student-performance-data-set | 649 | CC0 | |
| | CDE Downloadable Data | cde.ca.gov/ds/ad/downloadabledata.asp | Real data | Public | |
| |
| ### Papers/Frameworks |
| | Name | What It Does | URL | |
| |---|---|---| |
| | SING-SQL | Best framework for single-database in-domain training | github.com/HasanAlpCaferoglu/SING-SQL | |
| | OmniSQL | Million-scale synthesis pipeline | github.com/RUCKBReasoning/OmniSQL | |
| | SQaLe | Schema-variety-driven dataset | huggingface.co/blog/cwolff/sqale | |
| | Vanna AI | RAG-based text-to-SQL (alternative to fine-tuning) | github.com/vanna-ai/vanna | |
| |
| ### Tutorials |
| | Name | What It Covers | URL | |
| |---|---|---| |
| | Rubrik + Gretel + Predibase | Full fine-tune tutorial with Gretel data | rubrik.com/blog/ai/24/... | |
| | Google Gemma QLoRA | Fine-tune Gemma on text-to-SQL with QLoRA | ai.google.dev/gemma/docs/core/huggingface_text_finetune_qlora | |
| | Towards AI GRPO series | 60 training sessions, Qwen2.5-Coder experiments | pub.towardsai.net/fine-tuning-open-source-llms-for-text-to-sql | |
|
|