DuckDB:在Hugging Face Hub上对5万多个数据集运行SQL查询
发布于2023年6月7日
作者:
- Steven Liu
- Quentin Lhoest
- Sylvain Lesage
Hugging Face Hub 致力于为每个人提供开放访问的数据集,并为用户提供探索和理解数据集的工具。您可以在这里找到许多用于训练流行大型语言模型(LLM)如Falcon、Dolly、MPT和StarCoder的数据集。我们还有处理数据集公平性和偏见工具如Disaggregators,以及像Dataset Viewer这样的工具,用于预览数据集中的示例。
(Dataset Viewer预览OpenAssistant数据集的截图)
我们很高兴地宣布,最近我们增加了一个新功能,可以帮助您在Hub上分析数据集;您可以使用DuckDB在Hub上存储的任何数据集上运行SQL查询!根据2022年StackOverflow开发者调查,SQL是第三大最受欢迎的编程语言。我们还希望有一个快速的数据库管理系统(DBMS),专门用于运行分析查询,这就是为什么我们对与DuckDB的集成感到兴奋的原因。我们希望这能让更多用户访问和分析Hub上的数据集!
摘要
数据集查看器会自动将Hub上的所有公开数据集转换为Parquet文件,您可以通过点击数据集页面顶部的“Auto-converted to Parquet”按钮查看。您还可以通过一个简单的HTTP调用访问Parquet文件URL列表。
import requests
r = requests.get("https://datasets-server.huggingface.co/parquet?dataset=blog_authorship_corpus")
j = r.json()
urls = [f['url'] for f in j['parquet_files'] if f['split'] == 'train']
urls
# 输出:
['https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00000-of-00002.parquet',
'https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00001-of-00002.parquet']
创建一个连接到DuckDB,并安装和加载httpfs扩展以允许读取和写入远程文件:
import duckdb
url = "https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00000-of-00002.parquet"
con = duckdb.connect()
con.execute("INSTALL httpfs;")
con.execute("LOAD httpfs;")
连接后,您可以开始编写SQL查询!
con.sql(f"""SELECT horoscope,
count(*),
AVG(LENGTH(text)) AS avg_blog_length
FROM '{url}'
GROUP BY horoscope
ORDER BY avg_blog_length
DESC LIMIT(5)"""
)
了解更多,请查看文档。
从数据集到Parquet
Parquet文件是列式存储方式,使得它们在存储、加载和分析时更有效。这在处理大型数据集时尤为重要,特别是在LLM时代,我们看到越来越多的大型数据集。为了支持这一点,数据集查看器会自动转换并发布Hub上任何公开数据集为Parquet文件。可以通过/parquet端点检索Parquet文件的URL。
使用DuckDB进行分析
DuckDB在运行复杂分析查询方面表现非常出色。它能够直接在远程Parquet文件上执行SQL查询而无需开销。通过httpfs扩展,DuckDB可以使用从/parquet端点提供的URL查询存储在Hub上的远程文件。DuckDB还支持查询多个Parquet文件,这非常方便,因为数据集查看器将大型数据集分割成较小的500MB片段。
展望未来
了解数据集的内容对于模型开发来说非常重要,因为它可以以各种方式影响模型质量!通过允许用户在Hub数据集上编写和执行任何SQL查询,这是我们实现数据集开放访问和帮助用户更了解数据集内容的另一种方式。我们很高兴看到你们尝试这个功能,并期待你们的分析揭示什么样的见解!
希望本文能够帮助您更好地理解如何使用DuckDB在Hugging Face Hub上运行SQL查询,以及为什么这对于数据集分析和使用来说是一个重要的工具。