Типы размещения словаря range_hashed
range_hashed
Словарь хранится в памяти в виде хеш-таблицы с упорядоченным массивом диапазонов и соответствующих им значений.
Этот метод хранения работает аналогично hashed и позволяет использовать диапазоны даты/времени (произвольный числовой тип) в дополнение к ключу.
Пример: таблица содержит скидки для каждого рекламодателя в формате:
Чтобы использовать поиск по диапазонам дат, определите элементы range_min и range_max в структуре. Эти элементы должны содержать элементы name и type (если type не указан, будет использован тип по умолчанию — Date). type может быть любым числовым типом (Date / DateTime / UInt64 / Int32 / другие).
Значения range_min и range_max должны укладываться в диапазон типа Int64.
Пример:
- DDL
- Файл конфигурации
Для работы с такими словарями необходимо передать дополнительный аргумент в функцию dictGet — значение, для которого подбирается диапазон:
Пример запроса:
Эта функция возвращает значение для указанных id и диапазона дат, содержащего переданную дату.
Подробности алгоритма:
- Если
idне найден или для этогоidне найден диапазон, возвращается значение по умолчанию для типа атрибута. - Если имеются пересекающиеся диапазоны и
range_lookup_strategy=min, возвращается подходящий диапазон с минимальнымrange_min; если найдено несколько диапазонов — возвращается диапазон с минимальнымrange_max; если снова найдено несколько диапазонов (несколько диапазонов имеют одинаковыеrange_minиrange_max), возвращается случайный диапазон из них. - Если имеются пересекающиеся диапазоны и
range_lookup_strategy=max, возвращается подходящий диапазон с максимальнымrange_min; если найдено несколько диапазонов — возвращается диапазон с максимальнымrange_max; если снова найдено несколько диапазонов (несколько диапазонов имеют одинаковыеrange_minиrange_max), возвращается случайный диапазон из них. - Если
range_maxимеет значениеNULL, диапазон является открытым.NULLтрактуется как максимально возможное значение. Дляrange_minв качестве открытого значения могут использоваться1970-01-01или0(-MAX_INT).
Пример конфигурации:
- DDL
- Файл конфигурации
Пример конфигурации с пересекающимися и открытыми диапазонами:
complex_key_range_hashed
Словарь хранится в памяти в виде хеш-таблицы с упорядоченным массивом диапазонов и соответствующими им значениями (см. range_hashed). Этот тип хранения предназначен для использования с составными ключами.
Пример конфигурации: