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 возвращает следующие фиксированные столбцы:
| Столбец | Тип | Описание |
|---|---|---|
CatalogName | STRING | Имя Catalog. |
DatabaseName | STRING | Имя базы данных. |
TableName | STRING | Имя таблицы. |
IndexName | STRING | Имя логического индекса Lance. |
IndexUuid | STRING | UUID физической записи индекса. |
DatasetVersion | BIGINT | Версия набора данных, указанная в физической записи индекса, то есть версия набора данных, при которой была создана эта запись. Физические записи одного логического индекса могут содержать разные версии набора данных. Значение всегда равно 1 или больше. |
Пример
Сначала настройте Filesystem Catalog, как описано в разделе Lance Catalog, и создайте набор данных и индекс с помощью внешних инструментов Lance. Замените имена из примеров на имена доступной вам таблицы. Для этой таблицы требуется привилегия SHOW.
-
Выведите физические записи индексов таблицы
vs_ivf_pq_f32в Cataloglance_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.