Hugging-Face-Unterstützung
Die Erweiterung httpfs führt Unterstützung für das Protokoll hf:// ein, um Datensätze in Hugging-Face-Repositories abzufragen.
Details stehen im Ankündigungs-Blogbeitrag.
Verwendung
Hugging-Face-Repositories können mit dem folgenden URL-Muster abgefragt werden:
hf://datasets/⟨my_username⟩/⟨my_dataset⟩/⟨path_to_file⟩Um beispielsweise eine CSV-Datei zu lesen, können Sie die folgende Abfrage verwenden:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-csv-1/data.csv';Dabei gilt:
datasets-examplesist der Name des Users bzw. der Organisationdoc-formats-csv-1ist der Name des Dataset-Repositoriesdata.csvist der Dateipfad im Repository
Das Ergebnis der Abfrage ist:
| kind | sound |
|---|---|
| dog | woof |
| cat | meow |
| pokemon | pika |
| human | hello |
Um eine JSONL-Datei zu lesen, können Sie Folgendes ausführen:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-jsonl-1/data.jsonl';Zum Lesen einer Parquet-Datei verwenden Sie die folgende Abfrage:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-parquet-1/data/train-00000-of-00001.parquet';Jeder dieser Befehle liest die Daten aus dem jeweiligen Dateiformat und zeigt sie in einer strukturierten tabellarischen Form. Wählen Sie den passenden Befehl je nach Dateiformat.
Lokale Tabelle anlegen
Um nicht bei jeder Abfrage den Remote-Endpunkt anzusprechen, können Sie die Daten mit einem CREATE TABLE ... AS-Befehl in einer DuckDB-Tabelle speichern. Beispiel:
CREATE TABLE data AS SELECT * FROM 'hf://datasets/datasets-examples/doc-formats-csv-1/data.csv';Anschließend fragen Sie die Tabelle data einfach so ab:
SELECT *FROM data;Mehrere Dateien
Um alle Dateien unter einem bestimmten Verzeichnis abzufragen, können Sie ein Glob-Muster verwenden. Beispiel:
SELECT count(*) AS countFROM 'hf://datasets/cais/mmlu/astronomy/*.parquet';| count |
|---|
| 173 |
Mit Glob-Mustern können Sie große Datensätze effizient verarbeiten und umfassende Abfragen über mehrere Dateien ausführen, was Inspektion und Verarbeitung vereinfacht. Hier sehen Sie, wie Sie nach Fragen suchen, die das Wort „planet“ in astronomy enthalten:
SELECT count(*) AS countFROM 'hf://datasets/cais/mmlu/astronomy/*.parquet'WHERE question LIKE '%planet%';| count |
|---|
| 21 |
Versionierung und Revisions
In Hugging-Face-Repositories sind Dataset-Versionen bzw. Revisions unterschiedliche Aktualisierungen eines Datensatzes. Jede Version ist ein Snapshot zu einem bestimmten Zeitpunkt, mit dem Sie Änderungen und Verbesserungen nachverfolgen können. In Git-Begriffen entspricht das einem Branch oder einem bestimmten Commit.
Sie können verschiedene Dataset-Versionen/Revisions mit der folgenden URL abfragen:
hf://datasets/⟨my_username⟩/⟨my_dataset⟩@⟨my_branch⟩/⟨path_to_file⟩Beispiel:
SELECT *FROM 'hf://datasets/datasets-examples/doc-formats-csv-1@~parquet/**/*.parquet';| kind | sound |
|---|---|
| dog | woof |
| cat | meow |
| pokemon | pika |
| human | hello |
Die vorherige Abfrage liest alle Parquet-Dateien unter der Revision ~parquet. Das ist ein spezieller Branch, in dem Hugging Face automatisch die Parquet-Dateien jedes Datensatzes erzeugt, um effizientes Scannen zu ermöglichen.
Authentifizierung
Hinterlegen Sie Ihren Hugging-Face-Token im DuckDB Secrets Manager, um auf private oder zugangsbeschränkte Datensätze zuzugreifen. Besuchen Sie zuerst Hugging Face Settings – Tokens, um Ihren Zugriffstoken zu erhalten. Setzen Sie ihn anschließend in Ihrer DuckDB-Sitzung über den Secrets Manager von DuckDB. DuckDB unterstützt zwei Provider für die Secret-Verwaltung:
CONFIG
Der User muss alle Konfigurationsinformationen in die Anweisung CREATE SECRET übergeben. Um ein Secret mit dem Provider CONFIG anzulegen, verwenden Sie den folgenden Befehl:
CREATE SECRET hf_token ( TYPE huggingface, TOKEN 'your_hf_token');credential_chain
Versucht automatisch, Zugangsdaten zu holen. Für den Hugging-Face-Token versucht DuckDB, ihn aus ~/.cache/huggingface/token zu lesen. Um ein Secret mit dem Provider credential_chain anzulegen, verwenden Sie den folgenden Befehl:
CREATE SECRET hf_token ( TYPE huggingface, PROVIDER credential_chain);