Zum Inhalt springen

SeaweedFS-Import

Voraussetzungen

Bei SeaweedFS können Sie über das S3-kompatible Gateway die S3-Unterstützung von DuckDB nutzen, um aus SeaweedFS-Buckets zu lesen und in sie zu schreiben.

Dazu wird die httpfs-Erweiterung benötigt, die sich mit dem SQL-Befehl INSTALL installieren lässt. Das muss nur einmal ausgeführt werden.

Um SeaweedFS lokal auszuprobieren, legen Sie eine Datei s3config.json mit den S3-Anmeldedaten an:

{
"identities": [
{
"name": "analyst",
"credentials": [
{
"accessKey": "your_access_key_id",
"secretKey": "your_secret_access_key"
}
],
"actions": ["Admin", "Read", "Write", "List", "Tagging"]
}
]
}

Starten Sie anschließend den gesamten SeaweedFS-Stack in einem Container und legen Sie einen Bucket an:

Terminal window
docker run -d --name seaweedfs -p 8333:8333 \
-v "$(pwd)/s3config.json:/etc/seaweedfs/s3config.json" \
chrislusf/seaweedfs:latest \
mini -dir=/data -s3.config=/etc/seaweedfs/s3config.json
echo "s3.bucket.create -name ⟨your-bucket⟩" | \
docker exec -i seaweedfs weed shell -master=localhost:9333

Der S3-Endpunkt lauscht auf Port 8333.

Anmeldedaten und Konfiguration

Legen Sie ein S3-Secret mit den Anmeldedaten aus der SeaweedFS-S3-Konfiguration an:

CREATE SECRET my_secret (
TYPE s3,
KEY_ID '⟨your_access_key_id⟩',
SECRET '⟨your_secret_access_key⟩',
ENDPOINT '⟨seaweedfs-host⟩:8333',
URL_STYLE 'path',
USE_SSL false
);
  • SeaweedFS bedient Path-Style-Anfragen, setzen Sie URL_STYLE daher auf path. Wildcard-DNS ist nicht nötig.
  • SeaweedFS benötigt keine Region, REGION kann also weggelassen werden.
  • Setzen Sie USE_SSL false für einen HTTP-Endpunkt ohne TLS, etwa die lokale Einrichtung oben; lassen Sie die Option weg, wenn das Gateway hinter TLS läuft.

Abfragen

Nach dem Einrichten der SeaweedFS-Anmeldedaten können Sie die Daten mit den eingebauten Methoden von DuckDB abfragen, etwa read_csv oder read_parquet:

SELECT * FROM 's3://⟨your-bucket⟩/⟨file⟩.csv';
SELECT * FROM read_parquet('s3://⟨your-bucket⟩/⟨file⟩.parquet');

Schreiben funktioniert ebenso, einschließlich Glob-Reads über das Ergebnis:

COPY (SELECT 42 AS answer) TO 's3://⟨your-bucket⟩/sample/answer.parquet';
SELECT * FROM read_parquet('s3://⟨your-bucket⟩/sample/*.parquet');

SeaweedFS unterstützt auch Iceberg: Table Buckets speichern die Tabellendaten als Parquet-Dateien, und der eingebaute Iceberg REST Catalog des Gateways liefert die Tabellenmetadaten. Siehe das SeaweedFS-Catalog-Beispiel, um Iceberg-Tabellen darüber abzufragen.