資料集檢視器文件
ClickHouse
並獲得增強的文件體驗
開始使用
ClickHouse
ClickHouse 是一款針對分析工作負載而設計的高速、高效的列式資料庫,它使得使用 SQL 分析 Hub 託管資料集變得容易。為了快速上手,您可以使用 clickhouse-local
從命令列執行 SQL 查詢,而無需完全安裝 ClickHouse。
有關如何使用 ClickHouse 分析 Hub 上的資料集的更多詳細資訊,請檢視這篇部落格。
首先,下載並安裝 clickhouse-local
curl https://clickhouse.com/ | 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 │
└───────────┴────────┴────────────────────┘