Lance-Erweiterung
Die lance-Erweiterung fügt Unterstützung für das Lesen und Schreiben von Lance-Tabellen hinzu. Lance ist ein modernes Lakehouse-Format, das für ML/AI-Workloads optimiert ist und native Cloud-Storage-Unterstützung bietet.
Installation und Laden
Sie können die lance-Erweiterung aus dem Kern-Erweiterungs-Repository von DuckDB installieren und mit den folgenden Befehlen laden:
INSTALL lance;LOAD lance;Verwendung
Ein Lance-Dataset abfragen
Lokale Datei:
SELECT *FROM '⟨path/to/dataset.lance⟩'LIMIT 10;S3:
SELECT *FROM 's3://⟨bucket/path/to/out.lance⟩'LIMIT 10;Um Object-Store-URIs (z. B. s3://...) zu verwenden, konfigurieren Sie ein Secret vom Typ TYPE lance über den Secrets Manager:
CREATE SECRET ( TYPE lance, PROVIDER credential_chain, SCOPE 's3://bucket/');
SELECT *FROM 's3://⟨bucket/path/to/out.lance⟩'LIMIT 10;Ein Lance-Dataset schreiben
Verwenden Sie die Anweisung COPY ... TO ..., um Abfrageergebnisse als Lance-Dataset zu materialisieren.
-- Create/overwrite a Lance dataset from a queryCOPY ( SELECT 1::BIGINT AS id, 'a'::VARCHAR AS s UNION ALL SELECT 2::BIGINT AS id, 'b'::VARCHAR AS s) TO '⟨path/to/dataset.lance⟩' ( FORMAT lance, MODE 'overwrite');
-- Read it back via the replacement scanSELECT count(*) FROM '⟨path/to/dataset.lance⟩';
-- Append more rows to an existing datasetCOPY ( SELECT 3::BIGINT AS id, 'c'::VARCHAR AS s) TO '⟨path/to/dataset.lance⟩' ( FORMAT lance, MODE 'append');
-- Optionally create an empty dataset (schema only)COPY ( SELECT 1::BIGINT AS id, 'x'::VARCHAR AS s WITH NO DATA) TO 'path/to/empty.lance' ( FORMAT lance, MODE 'overwrite', WRITE_EMPTY_FILE true);Um auf s3://...-Pfade zu schreiben, konfigurieren Sie ein Secret vom Typ TYPE lance für diesen Scope über den Secrets Manager:
CREATE SECRET ( TYPE lance, PROVIDER credential_chain, SCOPE 's3://⟨bucket⟩/');
COPY (SELECT 1 AS id)TO 's3://⟨bucket/path/to/out.lance⟩'(FORMAT lance, MODE 'overwrite');Ein Lance-Dataset mit CREATE TABLE erstellen (Directory Namespace)
Wenn Sie ein Verzeichnis als Lance-Namespace ATTACHen, können Sie neue Datasets mit CREATE TABLE (nur Schema)
oder CREATE TABLE AS SELECT (CTAS) erstellen. Das Dataset wird nach ⟨namespace_root⟩/⟨table_name.lance⟩{:.language-sql .highlight} geschrieben.
ATTACH '⟨path/to/dir⟩' AS lance_ns (TYPE lance);
-- Schema-only (creates an empty dataset)CREATE TABLE lance_ns.main.my_empty (id BIGINT, s VARCHAR);
-- CTAS (writes query results)CREATE TABLE lance_ns.main.my_dataset AS SELECT 1::BIGINT AS id, 'a'::VARCHAR AS s UNION ALL SELECT 2::BIGINT AS id, 'b'::VARCHAR AS s;
SELECT count(*) FROM lance_ns.main.my_dataset;Vektorsuche
-- Search a vector column, returning distances in `_distance` (smaller is closer)SELECT id, label, _distanceFROM lance_vector_search( '⟨path/to/dataset.lance⟩', 'vec', [0.1, 0.2, 0.3, 0.4]::FLOAT[4], k = 5, prefilter = true)ORDER BY _distance ASC;Siehe die SQL-Referenz für die vollständige Parameterdokumentation.
Volltextsuche (FTS)
-- Search a text column, returning BM25-like scores in `_score`SELECT id, text, _scoreFROM lance_fts( '⟨path/to/dataset.lance⟩', 'text', 'puppy', k = 10, prefilter = true)ORDER BY _score DESC;Siehe die SQL-Referenz für die vollständige Parameterdokumentation.
Hybride Suche (Vektor + FTS)
-- Combine vector and text scores, returning `_hybrid_score` in addition to `_distance` / `_score`SELECT id, _hybrid_score, _distance, _scoreFROM lance_hybrid_search('⟨path/to/dataset.lance⟩', 'vec', [0.1, 0.2, 0.3, 0.4]::FLOAT[4], 'text', 'puppy', k = 10, prefilter = false, alpha = 0.5, oversample_factor = 4)ORDER BY _hybrid_score DESC;Einschränkungen
Die lance-Erweiterung ist derzeit für die folgenden Plattformen verfügbar:
linux_amd64linux_arm64osx_arm64windows_amd64