Home

Awesome

Spider 2.0: Evaluating Language Models on Real-World Enterprise Text-to-SQL Workflows

<p align="center"> <a href="https://spider2-sql.github.io/">Website</a> • <a href="https://arxiv.org/abs/2411.07763">Paper</a> • <a href="https://github.com/xlang-ai/Spider2/blob/main/spider2/README.md">Data</a> </p>

📰 News

👋 Overview

Local Image

<div style="width: 10%; margin: auto;"> <table style="font-size: 12px; width: 100%;"> <tr> <th>Setting</th> <th>Task Type</th> <th>#Examples</th> <th>Databases</th> <th>Cost</th> </tr> <tr> <td><strong>Spider 2.0</strong></td> <td>Code agent task</td> <td>632</td> <td>BigQuery(214), Snowflake(198), Postgres(10), ClickHouse(7), SQLite(135), DuckDB (DBT)(68)</td> <td>Some cost incurred</td> </tr> <tr> <td><strong>Spider 2.0-Snow</strong></td> <td>Text-to-SQL task</td> <td>547</td> <td>Snowflake(547)</td> <td><span style="color: red;">NO COST!😊</span></td> </tr> <tr> <td><strong>Spider 2.0-Lite</strong></td> <td>Text-to-SQL task</td> <td>547</td> <td>BigQuery(214), Snowflake(198), SQLite(135)</td> <td>Some cost incurred</td> </tr> </table> </div>

Why Spider 2.0?

In 2018, we introduced Spider 1.0, SParC, and CoSQL as part of the Yale Semantic Parsing and Text-to-SQL Challenge Series, attracting over 300 submissions from leading research labs worldwide.

Now, in the era of Large Language Models (LLMs), we present Spider 2.0 to advance code generation, particularly text-to-SQL capabilities.

This new benchmark offers a more realistic and challenging test of LLMs' performance on complex enterprise-level text-to-SQL workflows, involving complex data environments (e.g., >3000 columns), multiple SQL dialects (e.g., BigQuery, Snowflake), and diverse operations (e.g., transformation, analytics).

Notably, as shown below, even the most advanced LLMs, including GPT-4, solve only 6.0% of Spider 2.0 tasks, compared to 86.6% on Spider 1.0 and 57.4% on BIRD, highlighting the significant challenges posed by Spider 2.0.

Spider 1.0 devSpider 1.0 testBIRD testSpider 2.0-liteSpider 2.0-snow
DailSQL + GPT-482.486.657.45.62.2
CodeS-15B85.4-59.30.70.0

🚀 Quickstart

Sign Up for Your Own BigQuery and Snowflake Accounts

  1. To sign up for a BigQuery account, please follow this guideline, get your own credentials.

  2. Follow this guideline and fill out this Spider2 Snowflake Access, and we will send you an account sign-up email, which will allow you to access the Snowflake database.

Important Notes:

Spider 2.0

For Spider 2.0, all evaluation examples are aggregated in file spider2.jsonl, where each data point contains the following field:

{
    "instance_id": "ga001",
    "instruction": "I want to know the preferences of customers who purchased the Google Navy Speckled Tee in December 2020. What other product was purchased with the highest total quantity alongside this item?",
    "type": "Bigquery"
}

For each instance, we also provide a separate folder ./spider2/examples/{instruction_id} as its Execution Context to simulate the agentic setting. Each folder may have the following files:

The agent has to interact with complex SQL workflows, process extremely long contexts, perform intricate reasoning, and generate multiple SQL queries with diverse operations, often exceeding 100 lines across multiple turns.

Run Spider-Agent

For Spider 2.0, we proposed an agent framework Spider-Agent based on Docker environment.

  1. Install Docker. Follow the instructions in the Docker setup guide to install Docker on your machine.
  2. Install conda environment.
git clone https://github.com/xlang-ai/Spider2.git
cd methods/spider-agent

# Optional: Create a Conda environment for Spider 2.0
# conda create -n spider2 python=3.11
# conda activate spider2

# Install required dependencies
pip install -r requirements.txt
  1. Configure credential: follow this instruction to configure BigQuery for running the SQL queries. follow this guideline to get your own Snowflake username and password in our snowflake database. You must update bigquery_credential.json and snowflake_credential.json.

  2. Download Spider 2.0 Database Source

cd spider2

gdown 'https://drive.google.com/uc?id=1OxF-OuPwgb2miQxzftGLZBzPRQtLsyoV'
gdown 'https://drive.google.com/uc?id=1gSB_30ey08GkDrMEXqj3LMJEH4ziQst1'
gdown 'https://drive.google.com/uc?id=1N3f7BSWC4foj-V-1C9n8M2XmgV7FOcqL'
gdown 'https://drive.google.com/uc?id=1s0USV_iQLo4oe05QqAMnhGGp5jeejCzp'

  1. Spider 2.0 Setup
python setup.py
  1. Run agent
cd ../../methods/spider-agent
export OPENAI_API_KEY=your_openai_api_key
python run.py --model gpt-4o -s test1

Spider 2.0-Snow

We would like to thank Snowflake for sponsoring our project. To better align with the research interests of the text-to-SQL community, we are offering Spider 2.0-Snow, which hosts all databases from Spider 2.0 in the Snowflake data warehouse. This arrangement facilitates users in developing advanced text-to-SQL systems more conveniently.

We adapt Spider-Agent and other text-to-SQL baselines to this setting.

Run Spider-Agent(Snow)

  1. Install Docker. Follow the instructions in the Docker setup guide to install Docker on your machine.
  2. Install conda environment.
git clone https://github.com/xlang-ai/Spider2.git
cd methods/spider-agent-snow

# Optional: Create a Conda environment for Spider 2.0
# conda create -n spider2 python=3.11
# conda activate spider2

# Install required dependencies
pip install -r requirements.txt
  1. Configure credential: Follow this guideline to get your own Snowflake username and password in our snowflake database. You must update snowflake_credential.json.

  2. Spider 2.0-Snow Setup

python spider_agent_setup_snow.py
  1. Run agent
export OPENAI_API_KEY=your_openai_api_key
python run.py --model gpt-4o -s test1

Spider 2.0-Lite

To align with research interests in traditional Text2SQL settings, we also release Spider 2.0-Lite. This set is more self-contained, with well-prepared database metadata and documentation, making it a text-in, text-out task that supports faster development and evaluation.

You can also access the Spider 2.0-Lite by huggingface dataset.🤗

from datasets import load_dataset
ds = load_dataset("xlangai/spider2-lite")

Each file in spider2-lite.json contains the following fields:

We proposed baselines based on the widely used text2sql methods: Dail-SQL and CodeS, with evaluation results reported :test_tube:.

📋 Leaderboard Submission

We only release the gold answer of about partial examples of Spider 2.0, Spider 2.0-Lite and Spider 2.0-Snow. You must follow this submission guidance to get your score on Spider 2.0 FULL dataset. For submission, provide a clear README, compressed code that passes your dev evaluation, any additional API keys required, and a report of prompt token counts for cost estimation. Usually, we will return your results in 10 days!

🙇‍♂️ Acknowledgement

We thank Snowflake for their generous support in hosting the Spider 2.0 Challenge. We also thank Tianbao Xie, Yiheng Xu, Fan Zhou, Yuting Lan, Per Jacobsson, Yiming Huang, Canwen Xu, Zhewei Yao, and Binyuan Hui for their helpful feedback on this work. The leaderboard submission guidelines are greatly inspired by BIRD-SQL, and we thank them for their contributions.

<p align="center"> <img src="assets/Snowflake.png" width="35%"> </p>

✍️ Citation

If you find our work helpful, please cite as

@misc{lei2024spider2,
      title={Spider 2.0: Evaluating Language Models on Real-World Enterprise Text-to-SQL Workflows}, 
      author={Fangyu Lei and Jixuan Chen and Yuxiao Ye and Ruisheng Cao and Dongchan Shin and Hongjin Su and Zhaoqing Suo and Hongcheng Gao and Wenjing Hu and Pengcheng Yin and Victor Zhong and Caiming Xiong and Ruoxi Sun and Qian Liu and Sida Wang and Tao Yu},
      year={2024},
      eprint={2411.07763},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2411.07763}, 
}