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:
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:9333Der 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_STYLEdaher aufpath. Wildcard-DNS ist nicht nötig. - SeaweedFS benötigt keine Region,
REGIONkann also weggelassen werden. - Setzen Sie
USE_SSL falsefü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.