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对应的范围,则返回该 attribute 类型的默认值。 - 如果存在重叠范围且
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
- 配置文件
包含重叠范围和开放区间的配置示例: