> ## 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.

> 等間隔の時間グリッド上で、時系列値に直線を当てはめます。

# timeSeriesLinearRegressionToGrid

<h2 id="timeSeriesLinearRegressionToGrid">
  timeSeriesLinearRegressionToGrid
</h2>

導入バージョン: v26.9.0

タイムスタンプと値のペアからなる時系列データを受け取り、開始タイムスタンプ、終了タイムスタンプ、ステップで定義される等間隔の時間グリッド上で、値に直線をフィッティングする集約関数です。グリッド上の各点について、指定された時間ウィンドウ内のサンプルに直線をフィッティングし、タプル `(intercept, slope)` を返します。`intercept` はグリッド点のタイムスタンプにおけるその直線の値、`slope` は 1 秒あたりの傾きです。ウィンドウ内のサンプルが不足している場合は、どちらも NULL になります。

オフセット `t` を指定した `timeSeriesPredictLinearToGrid` の結果は `intercept + slope * t` と等しく、`timeSeriesDerivToGrid` の結果は `slope` と等しくなります。PromQL 関数 `predict_linear` はこの関数を使って実装されているため、`predict_linear(v, time())` のように、グリッド点ごとに異なる予測オフセットを使用できます。

サンプルは次の 3 つの形式のいずれかで渡せます。

* 2 つの引数 `timestamp` と `value` として渡す形式。各行に 1 つのサンプルが格納されます。
* タイムスタンプと値の 2 つの Array として渡す形式。各行に 1 つの時系列全体が格納されます。
* `(timestamp, value)` タプルからなる単一の Array として渡す形式。各行に 1 つの時系列全体が格納されます。

同じタイムスタンプを持つサンプルが複数ある場合は、そのうち値が最大のサンプル 1 つのみが使用されます。NaN 値は他のどの値よりも優先度が低いため、NaN 値が使用されるのは、そのタイムスタンプのサンプルがすべて NaN の場合に限られます。

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

**構文**

```sql theme={null}
timeSeriesLinearRegressionToGrid(start_timestamp, end_timestamp, grid_step, staleness)(timestamp, value)
timeSeriesLinearRegressionToGrid(start_timestamp, end_timestamp, grid_step, staleness)(samples)
```

**パラメータ**

* `start_timestamp` — グリッドの開始時刻を指定します。小数、または数値や日時テキストを含む文字列も指定できます。[`UInt32`](/ja/reference/data-types/int-uint) または [`DateTime`](/ja/reference/data-types/datetime) または [`DateTime64`](/ja/reference/data-types/datetime64) または [`Float*`](/ja/reference/data-types/float) または [`Decimal*`](/ja/reference/data-types/decimal) または [`String`](/ja/reference/data-types/string)
* `end_timestamp` — グリッドの終了時刻を指定します。小数、または数値や日時テキストを含む文字列も指定できます。[`UInt32`](/ja/reference/data-types/int-uint) または [`DateTime`](/ja/reference/data-types/datetime) または [`DateTime64`](/ja/reference/data-types/datetime64) または [`Float*`](/ja/reference/data-types/float) または [`Decimal*`](/ja/reference/data-types/decimal) または [`String`](/ja/reference/data-types/string)
* `grid_step` — グリッドのステップ (間隔) を秒単位で指定します。小数、または数値や '15s'、'1m' のような期間を含む文字列も指定できます。[`UInt32`](/ja/reference/data-types/int-uint) または [`Float*`](/ja/reference/data-types/float) または [`Decimal*`](/ja/reference/data-types/decimal) または [`String`](/ja/reference/data-types/string)
* `staleness` — 対象とするサンプルの最大「staleness」 (秒単位) を指定します。staleness ウィンドウは左開右閉区間です。小数、または数値や '15s'、'1m' のような期間を含む文字列も指定できます。[`UInt32`](/ja/reference/data-types/int-uint) または [`Float*`](/ja/reference/data-types/float) または [`Decimal*`](/ja/reference/data-types/decimal) または [`String`](/ja/reference/data-types/string)

**引数**

* `timestamp` — サンプルのタイムスタンプ。単一の値またはArrayを指定できます。[`UInt32`](/ja/reference/data-types/int-uint) または [`DateTime`](/ja/reference/data-types/datetime) または [`DateTime64`](/ja/reference/data-types/datetime64) または [`Array(UInt32)`](/ja/reference/data-types/array) または [`Array(DateTime)`](/ja/reference/data-types/array) または [`Array(DateTime64)`](/ja/reference/data-types/array)
* `value` — タイムスタンプに対応する時系列の値。単一の値またはArrayを指定できます。[`Float*`](/ja/reference/data-types/float) または [`Array(Float*)`](/ja/reference/data-types/array)
* `samples` — タプル `(timestamp, value)` のArrayとして渡される時系列のサンプル。タプルの各要素は、上記のタイムスタンプおよび値の型を持ちます。タイムスタンプと値を 2 つの別々の引数として渡す代わりに使用できます。[`Array(Tuple(T1, T2))`](/ja/reference/data-types/array)

**戻り値**

各グリッド点についてのタプル `(intercept, slope)`。グリッド点のタイムスタンプにおける回帰直線の値と、1 秒あたりの傾きを表します。あるグリッド点についてウィンドウ内のサンプルが不足している場合、両方の要素が NULL になります。[`Array(Tuple(intercept Nullable(Float64), slope Nullable(Float64)))`](/ja/reference/data-types/array)

**例**

**グリッド \[100, 110, 120] 上で直線をフィッティングし、timeSeriesPredictLinearToGrid および timeSeriesDerivToGrid と比較する**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    [100, 110, 120]::Array(DateTime) AS timestamps,
    [10, 20, 30]::Array(Float64) AS values,
    timeSeriesLinearRegressionToGrid(100, 120, 10, 30)(timestamps, values) AS regression
SELECT
    regression,
    arrayMap(r -> r.intercept + r.slope * 60, regression) AS predict_linear_60,
    arrayMap(r -> r.slope, regression) AS deriv;
```

```response title=Response theme={null}
┌─regression──────────────────┬─predict_linear_60─┬─deriv──────┐
│ [(NULL,NULL),(20,1),(30,1)] │ [NULL,80,90]      │ [NULL,1,1] │
└─────────────────────────────┴───────────────────┴────────────┘
```
