range_hashed
Dictionary は、順序付けされた範囲の Array とそれに対応する値を持つハッシュテーブルの形式で、メモリ内に格納されます。 この格納方式は hashed と同様に機能し、キーに加えて日付/時刻 (任意の数値型) の範囲も使用できます。 例: テーブルには、各広告主の割引が次の形式で格納されています。range_min 要素と range_max 要素を定義します。これらの要素には name 要素と type 要素を含める必要があります (type が指定されていない場合は、デフォルトの型である Date が使用されます) 。type には任意の数値型 (Date / DateTime / UInt64 / Int32 / その他) を指定できます。
range_min と range_max の値は Int64 型に収まる必要があります。- DDL
- 設定ファイル
これらの Dictionary を使用するには、範囲の選択対象となる追加の引数を
dictGet 関数に渡す必要があります:
id に対応する値と、指定された日付を含む日付範囲を返します。
アルゴリズムの詳細:
idが見つからない場合、またはそのidに対応する範囲が見つからない場合は、その属性の型のデフォルト値を返します。- 重複する範囲があり、
range_lookup_strategy=minの場合は、一致した範囲のうちrange_minが最小のものを返します。該当する範囲が複数ある場合は、range_maxが最小の範囲を返します。それでも複数ある場合 (複数の範囲でrange_minとrange_maxが同じ場合) は、その中からランダムに 1 つの範囲を返します。 - 重複する範囲があり、
range_lookup_strategy=maxの場合は、一致した範囲のうちrange_minが最大のものを返します。該当する範囲が複数ある場合は、range_maxが最大の範囲を返します。それでも複数ある場合 (複数の範囲でrange_minとrange_maxが同じ場合) は、その中からランダムに 1 つの範囲を返します。 range_maxがNULLの場合、その範囲は上限なしになります。NULLは取り得る最大値として扱われます。range_minには、範囲が開いていることを表す値として1970-01-01または0(-MAX_INT) を使用できます。
- DDL
- 設定ファイル
重複する範囲と開区間を含む設定例: