Перейти к содержимому
Последнее обновление

LANCE_INDEX_ENTRIES

Описание​

примечание

lance_index_entries поддерживается начиная с Apache Doris 4.1.5.

Табличная функция (TVF) lance_index_entries выводит физические записи индексов, зафиксированные в последнем снимке таблицы Lance. Она возвращает одну строку для каждой физической записи индекса и дополняет SHOW INDEX, который отображает логическое представление индексов (имя индекса, индексируемые столбцы, тип индекса и свойства) в наборе результатов с фиксированной схемой в стиле MySQL. UUID и версия набора данных физической записи индекса не вписываются в эту фиксированную схему и доступны только через эту TVF. Одно имя логического индекса может встречаться в нескольких строках, если у индекса есть несколько физических записей с разными UUID.

TVF работает только на чтение. Она считывает метаданные индексов только через Dataset.getIndexes() и не считывает сведения о количестве строк или статистику. Результат можно фильтровать обычными предикатами. Строки отсортированы по (IndexName, IndexUuid). Все считываемые данные проходят полную проверку: запрос либо возвращает полный результат, либо завершается ошибкой. Пустое или слишком длинное имя, отсутствие UUID, неположительное значение DatasetVersion, повторяющийся UUID или исходное количество записей свыше 16,384 приводят к ошибке всего запроса, а не к возврату усечённого результата. Зарезервированные системные индексы __lance_frag_reuse и __lance_mem_wal, которые Lance поддерживает для внутренних нужд, проходят проверку, но не отображаются.

Для TVF требуется привилегия SHOW для таблицы; функция поддерживается только для Filesystem Catalog в Lance. При использовании REST Catalog запрос отклоняется с ошибкой lance_index_entries is not supported for Lance REST catalogs.

Синтаксис​

LANCE_INDEX_ENTRIES(
"table" = "<table>"
);

Параметры​

lance_index_entries принимает ровно одну пару "key"="value".

ПараметрОписание
<table>Полное имя таблицы Lance из трёх частей catalog.database.table, для которой нужно просмотреть индексы. Идентификаторы можно заключать в обратные кавычки. Если многоуровневому Lance Namespace соответствует имя базы данных, содержащее ., заключите часть имени, соответствующую базе данных, в обратные кавычки, например lance_catalog.`doris.analytics`.items.

Возвращаемое значение​

TVF возвращает набор результатов, а не скалярное значение NULL. Для таблицы без пользовательских индексов возвращается ноль строк. Отсутствующий или недопустимый аргумент table вызывает ошибку. Аргумент table должен быть непустой строкой и не принимает SQL NULL.

TVF возвращает следующие фиксированные столбцы:

СтолбецТипОписание
CatalogNameSTRINGИмя Catalog.
DatabaseNameSTRINGИмя базы данных.
TableNameSTRINGИмя таблицы.
IndexNameSTRINGИмя логического индекса Lance.
IndexUuidSTRINGUUID физической записи индекса.
DatasetVersionBIGINTВерсия набора данных, указанная в физической записи индекса, то есть версия набора данных, при которой была создана эта запись. Физические записи одного логического индекса могут содержать разные версии набора данных. Значение всегда равно 1 или больше.

Пример​

Сначала настройте Filesystem Catalog, как описано в разделе Lance Catalog, и создайте набор данных и индекс с помощью внешних инструментов Lance. Замените имена из примеров на имена доступной вам таблицы. Для этой таблицы требуется привилегия SHOW.

  • Выведите физические записи индексов таблицы vs_ivf_pq_f32 в Catalog lance_catalog:

    select * from lance_index_entries("table" = "lance_catalog.default.vs_ivf_pq_f32");
    +---------------+--------------+---------------+----------------------+--------------------------------------+----------------+
    | CatalogName | DatabaseName | TableName | IndexName | IndexUuid | DatasetVersion |
    +---------------+--------------+---------------+----------------------+--------------------------------------+----------------+
    | lance_catalog | default | vs_ivf_pq_f32 | embedding_ivf_pq_f32 | 3f9c2a1e-7b4d-4e6f-9a1c-2d5e8f0b3a47 | 12 |
    +---------------+--------------+---------------+----------------------+--------------------------------------+----------------+

    Значения IndexUuid и DatasetVersion в этом выводе приведены для примера.

  • Отфильтруйте результат обычным предикатом:

    select IndexName, IndexUuid
    from lance_index_entries("table" = "lance_catalog.default.vs_ivf_pq_f32")
    where DatasetVersion >= 12
    order by IndexName, IndexUuid;
    IndexName             IndexUuid
    embedding_ivf_pq_f32 3f9c2a1e-7b4d-4e6f-9a1c-2d5e8f0b3a47

Пустой аргумент table вызывает ошибку, содержащую следующее сообщение:

SELECT * FROM lance_index_entries("table" = "");
Missing required lance_index_entries property 'table'

Дополнительные сведения о просмотре индексов Lance, включая логическое представление, предоставляемое командой SHOW INDEX, см. в разделе Lance Catalog.