cube. Тип данных для представления многомерных кубов
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext
.
Модуль реализует тип данных cube
для представления многомерных кубов, а также предоставляет класс операторов индекса GiST
для значений cube
.
Индекс GiST
для значений cube
может применяться в целях поиска значений в выражениях со следующими операторами:
=
;&&
;@>
в предложенияхWHERE
;<@
в предложенияхWHERE
.
Доработка
Доработка не проводилась.
Ограничения
Ограничения отсутствуют.
Установка
Модуль считается «доверенным», поэтому его могут устанавливать обычные пользователи, имеющие право CREATE
в текущей базе данных:
CREATE EXTENSION cube SCHEMA ext;
Настройка
Настройка не требуется.
Использование модуля
В таблице показаны операторы, предназначенные специально для работы с типом cube
:
Оператор | Описание |
---|---|
cube && cube → boolean | Кубы пересекаются? |
cube @> cube → boolean | Первый куб содержит второй? |
cube <@ cube → boolean | Первый куб содержится во втором? |
cube -> integer → float8 | Выдает n -ю координату куба (считая с 1) |
cube ~> integer → float8 | Выдает n -ю координату куба, применяя следующую нумерацию: n = 2 * k - 1 обозначает нижнюю границу k -й размерности, а n = 2 * k – верхнюю. Отрицательные значения n обозначают обратное значение соответствующей положительной координаты. Этот оператор предназначен для поддержки KNN-GiST |
cube <-> cube → float8 | Вычисляет евклидово расстояние между двумя кубами |
cube <#> cube → float8 | Вычисляет расстояние городских кварталов (метрику L-1 ) между двумя кубами |
cube <=> cube → float8 | Вычисляет расстояние Чебышева (метрику L -бесконечность) между двумя кубами |
Примеры использования:
-
эффективный поиск ближайшего соседа точки в трехмерном пространстве
(0.5, 0.5, 0.5)
:SELECT c FROM test ORDER BY c <-> cube(array[0.5,0.5,0.5]) LIMIT 1;
-
использование оператора
~>
может эффективно выдавать первые несколько значений, отсортированных по выбранной координате. Например, чтобы получить первые несколько кубов, упорядоченных по возрастанию первой координаты (левого нижнего угла), можно использовать следующий запрос:SELECT c FROM test ORDER BY c ~> 1 LIMIT 5;
-
получение двумерных кубов, отсортированных по убыванию первой координаты правого верхнего угла:
SELECT c FROM test ORDER BY c ~> 3 DESC LIMIT 5;
Ссылки на документацию разработчика
Дополнительно поставляемый модуль cube: https://www.postgresql.org/docs/15/cube.html.