> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 決定論的な疑似ランダム順序を用いて、各グリッドステップで最大 k 個の時系列を選択します。

# timeSeriesLimitKMasks

<h2 id="timeSeriesLimitKMasks">
  timeSeriesLimitKMasks
</h2>

導入バージョン: v26.8.0

時間グリッドの各タイムステップにおいて、決定論的な疑似ランダム方式で最大 k 個の時系列を選択します。

各入力行が 1 つの時系列に対応します。`key` は系列を識別する値、`sampling_key` は選択順序として使用される系列ごとのハッシュ、`values` は共通の時間グリッドに揃えられた系列の値です (そのため、すべての行の `values` 配列は
同じサイズでなければなりません) 。各タイムステップでは、そのステップで非 NULL の値を持つ系列のうち、サンプリングキーが小さい順に k 個の系列が選択されます。サンプリングキーが同じ場合は、`key` が小さい系列が優先されます。

この関数は PromQL の `limitk()` 集約オペレーターを実装したもので、タイムステップごとにサイズ `k` の有界ヒープを 1 つだけ保持します。そのため、
ステートのサイズは集計対象の系列数に依存しません。

<Note>
  この関数はプライベートプレビュー段階です。`enable_time_series_aggregate_functions = 1` を設定して有効にしてください。
</Note>

**構文**

```sql theme={null}
timeSeriesLimitKMasks(k, key, sampling_key, values)
```

**引数**

* `k` — 各時間ステップで選択する系列の数。全時間ステップ共通の単一の値か、時間ステップごとに 1 つずつ値を持つ配列のいずれかを指定します。すべての行で同じ値である必要があります。[`UInt*`](/ja/reference/data-types/int-uint) または [`Array(UInt*)`](/ja/reference/data-types/array)
* `key` — 時系列の識別子。[`UInt64`](/ja/reference/data-types/int-uint)
* `sampling_key` — 選択順序を決定する系列ごとのハッシュ値。例: `timeSeriesGroupToSamplingKey(key)`。[`UInt64`](/ja/reference/data-types/int-uint)
* `values` — 時間グリッドに揃えた時系列の値。時間ステップごとに 1 つの要素を持ちます。[`Array(Nullable(Float32))`](/ja/reference/data-types/array) または [`Array(Nullable(Float64))`](/ja/reference/data-types/array) または [`Array(Float32)`](/ja/reference/data-types/array) または [`Array(Float64)`](/ja/reference/data-types/array)

**戻り値**

選択された系列を、それぞれのステップごとのマスクと組にして `key` の昇順で返します。系列が時間ステップ `t` で選択されている場合は `steps_mask[t] = 1` となります。どの時間ステップでも選択されなかった系列は返されません。[`Array(Tuple(key UInt64, steps_mask Array(UInt8)))`](/ja/reference/data-types/array)

**例**

**サンプリングキーが小さい順に、時間ステップごとに 2 つの系列を選択する**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH [(1, [10., 1., NULL], 300), (2, [20., 2., 2.], 100), (3, [30., NULL, 1.], 200)]::Array(Tuple(UInt64, Array(Nullable(Float64)), UInt64)) AS series
SELECT timeSeriesLimitKMasks(2, s.1, s.3, s.2)
FROM (SELECT arrayJoin(series) AS s);
```

```response title=Response theme={null}
[(1,[0,1,0]),(2,[1,1,1]),(3,[1,0,1])]
```
