Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Эта функция доступна в бета-версии. Администраторы рабочей области могут управлять доступом к этой функции на странице "Предварительные версии ". См. статью "Управление предварительными версиями Azure Databricks".
Расширение lakebase_vector добавляет приблизительный поиск вектора ближайшего соседа lakebase_ann (ANN) в Lakebase с помощью типа индекса. Это компаньон раскрывающегося списка для pgvector: одни и те же векторные типы, операторы расстояния и синтаксис запросов работают без изменений.
Install
Сначала включите поиск Lakebase в параметрах проекта. Затем установите расширение:
CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;
Ключевое CASCADE слово автоматически устанавливается pgvector в качестве зависимости.
Быстрый старт
-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));
-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);
-- Create a lakebase_ann index
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops);
-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
Пополнение из синхронизированных таблиц
Если вы загружаете вложения из Unity Catalog, а не вставляете их напрямую, синхронизированные таблицы могут назначить столбец встраивания lakehouse прямо в столбец Postgres vector во время синхронизации, вместо стандартного JSONB отображения. См. раздел «Картографирование пользовательских типов» для поиска Lakebase.
Настройка индекса
Установите build_mode при создании индекса для управления компромиссом точности и скорости:
-
standard(по умолчанию): время восстановления балансов и наращивания индекса. Используется для большинства рабочих нагрузок. -
quality: улучшает воспоминание, но требует больше времени на сборку.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');
Режим fast сборки по-прежнему поддерживается для обратной совместимости.
По умолчанию lakebase_ann выбирает списки на основе статистики таблицы и конфигурации индекса. Настройте lists на явное управление расположением раздела:
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');
Параллельное создание индексов
Используется CREATE INDEX CONCURRENTLY для сборки без блокировки таблицы, а затем REINDEX CONCURRENTLY для перестроения без простоя:
CREATE INDEX CONCURRENTLY items_embedding_ann ON items
USING lakebase_ann (embedding vector_l2_ops);
REINDEX INDEX CONCURRENTLY items_embedding_ann;
Настройка точности поиска
Перед настройкой вызовите lakebase_ann_index_info(index_name) получение индекса listsdefault_probesи default_epsilon значений.
Используйте lakebase_ann.probes в момент запроса для контроля, сколько разделов ЭКО ищется. Более высокие значения улучшают отзыв по стоимости скорости запроса. Значение по умолчанию — 'auto'. Проверьте разные значения, чтобы достичь вашей цели по отзыву.
Форма должна probes совпадать с формой .lists Позвоните lakebase_ann_index_info , чтобы найти массивы lists , затем укажите одно значение для одноуровневого индекса или два значения с разделением запятой для двухуровневого индекса:
lists из сведений о индексе |
probes Для задания |
|---|---|
[] (пусто) |
'' |
[222] |
'22' |
[3333, 33333] |
'33, 333' |
Note
В небольшом наборе lakebase_ann данных используется точный (плоский) поиск вместо разбиения ЭКО и lakebase_ann_index_info возвращает пустые lists и default_probes. В этом случае оставьте probes установку на ''. Когда lists не пусто, probes значение с несовпадающей lists формой вызывает ошибку.
-- Check your index's lists array first
SELECT lakebase_ann_index_info('items_embedding_ann');
-- Then set probes to match the shape of lists.
-- One-level index (single-value lists): set one value.
SET lakebase_ann.probes TO '10';
-- Two-level index: set two ascending comma-separated values, for example '10, 20'.
-- Flat index (empty lists): leave probes set to ''.
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;
lakebase_ann.epsilon Определяет, сколько кандидатов переоценивается с помощью дистанций полной точности. Более высокие ценности меняют рейтинг большего числа кандидатов и занимают больше времени. Значение 'auto' по умолчанию хорошо подходит для большинства рабочих нагрузок. Во время плоского поиска на небольшом наборе epsilon данных всё ещё управляется полная точность реранжирования.
Предварительная фильтрация
По умолчанию Postgres применяет условия невекторного фильтра после того, как индекс ANN возвращает кандидатные строки. Можно lakebase_ann.prefilter оценить эти условия до перераспределения дистанции с полной точностью:
SET lakebase_ann.prefilter TO on;
SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;
Предварительная фильтрация работает лучше всего, когда фильтр дешев в оценке и удаляет большинство рядов. Оставьте его выключенным для фильтров, которые совпадают с множеством строк или требуют дорогостоящих вычислений, так как оценка фильтра внутри индекса может добавить накладных расходов.
Классы операторов
| Метрика расстояния | Класс операторов | Оператор запроса |
|---|---|---|
| L2 (Эвклидан) | vector_l2_ops |
<-> |
| Отрицательный внутренний продукт | vector_ip_ops |
<#> |
| Косинусное сходство | vector_cosine_ops |
<=> |
Выберите класс оператора, соответствующий обученному внедрению, и используйте ту же метрику для индекса и запроса:
-
vector_cosine_ops(<=>) — косинус сходство. Используйте его для большинства внедрения текста. Это самый распространенный выбор. -
vector_l2_ops() — Евклидеан (<->L2) расстояние. Используйте его, если абсолютные пространственные расстояния и векторы не нормализуются. -
vector_ip_ops(<#>) является отрицательным внутренним продуктом. Используйте его, если векторы предварительно нормализуются до длины единицы. Для векторов единиц внутренний продукт равен косине сходство и обычно быстрее.
Справочник по параметрам индекса
| Опция | Type | Default | Description |
|---|---|---|---|
build_mode |
string | 'standard' |
Контролирует баланс точности и скорости. Используйте 'quality' их для лучшего воспоминания ценой более длительной сборки индекса.
'fast' Поддерживается для обратной совместимости. |
lists |
string | 'auto' |
Устанавливает расположение разделов ЭКО. При 'auto', расширение выбирает значение на основе статистики таблицы и конфигурации индекса. Установите одно целое число, например '1000' , для одноуровневого индекса, или два восходящих целых чисел, разделённых по запятым, например '100, 1000' , для двухуровневого индекса. |
Справочник по GUC
| Parameter | Type | Default | Description |
|---|---|---|---|
lakebase_ann.probes |
string | 'auto' |
Количество разделов ЭКО для сканирования на каждом уровне. Более высокие значения улучшают отзыв по стоимости скорости запроса. Форма должна совпадать с lists массив из lakebase_ann_index_info. |
lakebase_ann.epsilon |
string | 'auto' |
Контролирует, сколько кандидатов переоценивается с помощью дистанций полной точности. Более высокие ценности меняют рейтинг большего числа кандидатов и занимают больше времени. |
lakebase_ann.prefilter |
enum | off |
Оценивает невекторные фильтры перед полной точностью перераспределения расстояний. Допустимые значения — on и off. Лучше всего использовать дешёвые фильтры, которые удаляют большинство кандидатных строк. |
Служебные функции
| Function | Returns | Description |
|---|---|---|
lakebase_ann_prewarm(regclass) |
пустота | Загружает индекс в память, чтобы устранить задержку холодного запуска в первом запросе. |
lakebase_ann_index_info(regclass) |
text | Возвращает метаданные индекса в виде текста, включая lists, default_probesи default_epsilon. |