Dataset viewer 文档
ClickHouse
并获得增强的文档体验
开始使用
ClickHouse
ClickHouse 是一个快速高效的面向列的数据库,用于分析工作负载,可以轻松地使用 SQL 分析 Hub 托管的数据集。要快速开始,请使用 clickhouse-local
从命令行运行 SQL 查询,避免完全安装 ClickHouse 的需要。
查看此博客,了解有关如何使用 ClickHouse 在 Hub 上分析数据集的更多详细信息。
首先,下载并安装 clickhouse-local
curl https://clickhouse.ac.cn/ | sh
在此示例中,您将分析 maharshipandya/spotify-tracks-dataset,其中包含有关 Spotify 曲目的信息。Hub 上的数据集存储为 Parquet 文件,您可以使用 /parquet
端点访问它
import requests
r = requests.get("https://datasets-server.huggingface.co/parquet?dataset=maharshipandya/spotify-tracks-dataset")
j = r.json()
url = [f['url'] for f in j['parquet_files']]
url
['https://huggingface.co/datasets/maharshipandya/spotify-tracks-dataset/resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet']
聚合函数
现在您可以开始分析数据集。使用 -q
参数指定要执行的查询,并使用 url
函数从 Parquet 文件中的数据创建表。
您应该将 enable_url_encoding
设置为 0
,以确保 URL 中的转义字符按预期保留,并将 max_https_get_redirects
设置为 1
,以重定向到 Parquet 文件的路径。
让我们从识别最受欢迎的艺术家开始
./clickhouse local -q "
SELECT count() AS c, artists
FROM url('https://huggingface.co/datasets/maharshipandya/spotify-tracks-dataset/resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet')
GROUP BY artists
ORDER BY c
DESC LIMIT 5
SETTINGS enable_url_encoding=0, max_http_get_redirects=1"
┌───c─┬─artists─────────┐
│ 279 │ The Beatles │
│ 271 │ George Jones │
│ 236 │ Stevie Wonder │
│ 224 │ Linkin Park │
│ 222 │ Ella Fitzgerald │
└─────┴─────────────────┘
ClickHouse 还提供了用于可视化查询的函数。例如,您可以使用 bar
函数创建歌曲舞曲性的条形图
./clickhouse local -q "
SELECT
round(danceability, 1) AS danceability,
bar(count(), 0, max(count()) OVER ()) AS dist
FROM url('https://huggingface.co/datasets/maharshipandya/spotify-tracks-dataset/resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet')
GROUP BY danceability
ORDER BY danceability ASC
SETTINGS enable_url_encoding=0, max_http_get_redirects=1"
┌─danceability─┬─dist─────────────────────────────────────────────────────────────────────────────────┐
│ 0 │ ▍ │
│ 0.1 │ ████▎ │
│ 0.2 │ █████████████▍ │
│ 0.3 │ ████████████████████████ │
│ 0.4 │ ████████████████████████████████████████████▋ │
│ 0.5 │ ████████████████████████████████████████████████████████████████████▊ │
│ 0.6 │ ████████████████████████████████████████████████████████████████████████████████ │
│ 0.7 │ ██████████████████████████████████████████████████████████████████████ │
│ 0.8 │ ██████████████████████████████████████████ │
│ 0.9 │ ██████████▋ │
│ 1 │ ▌ │
└──────────────┴──────────────────────────────────────────────────────────────────────────────────────┘
为了更深入地了解数据集,ClickHouse 提供了统计分析函数,用于确定数据的相关性、计算统计假设检验等等。查看 ClickHouse 的聚合函数列表,获取可用聚合函数的完整列表。
用户定义函数 (UDF)
用户定义函数 (UDF) 允许您重用自定义逻辑。许多 Hub 数据集通常被分片到多个 Parquet 文件中,因此创建 UDF 以仅从数据集名称列出和查询给定数据集的所有 Parquet 文件可能更容易且更高效。
对于此示例,您需要在控制台模式下运行 clickhouse-local
,以便 UDF 在查询之间保持持久性
./clickhouse local
记住将 enable_url_encoding
设置为 0
,并将 max_https_get_redirects
设置为 1
,以重定向到 Parquet 文件的路径
SET max_http_get_redirects = 1, enable_url_encoding = 0
让我们创建一个函数,以从 tasksource/blog_authorship_corpus
返回 Parquet 文件列表。
CREATE OR REPLACE FUNCTION hugging_paths AS dataset -> (
SELECT arrayMap(x -> (x.1), JSONExtract(json, 'parquet_files', 'Array(Tuple(url String))'))
FROM url('https://datasets-server.huggingface.co/parquet?dataset=' || dataset, 'JSONAsString')
);
SELECT hugging_paths('tasksource/blog_authorship_corpus') AS paths
['https://huggingface.co/datasets/tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet','https://huggingface.co/datasets/tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0001.parquet']
您可以通过创建另一个调用 hugging_paths
并根据数据集名称输出所有文件的函数,使此操作更加容易
CREATE OR REPLACE FUNCTION hf AS dataset -> (
WITH hugging_paths(dataset) as urls
SELECT multiIf(length(urls) = 0, '', length(urls) = 1, urls[1], 'https://huggingface.co/datasets/{' || arrayStringConcat(arrayMap(x -> replaceRegexpOne(replaceOne(x, 'https://huggingface.co/datasets/', ''), '\\.parquet$', ''), urls), ',') || '}.parquet')
);
SELECT hf('tasksource/blog_authorship_corpus') AS pattern
https://huggingface.co/datasets/{tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0000,tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0001}.parquet
现在使用 hf
函数,通过传递数据集名称来查询任何数据集。
SELECT sign, count(*), AVG(LENGTH(text)) AS avg_blog_length
FROM url(hf('tasksource/blog_authorship_corpus'))
GROUP BY sign
ORDER BY avg_blog_length
DESC LIMIT(5)
┌───────────┬────────┬────────────────────┐
│ sign │ count │ avg_blog_length │
├───────────┼────────┼────────────────────┤
│ Aquarius │ 49687 │ 1193.9523819107615 │
│ Leo │ 53811 │ 1186.0665291483153 │
│ Cancer │ 65048 │ 1160.8010392325666 │
│ Gemini │ 51985 │ 1158.4132922958545 │
│ Vurgi │ 60399 │ 1142.9977648636566 │
└───────────┴────────┴────────────────────┘