Zum Inhalt springen

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-examples ist der Name des Users bzw. der Organisation
  • doc-formats-csv-1 ist der Name des Dataset-Repositories
  • data.csv ist 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 count
FROM '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 count
FROM '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
);