range_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
- Файл конфигурации
Пример конфигурации с перекрывающимися и открытыми диапазонами: