GROUP BY 句を使用すると、1 つ以上のタグの値または指定された時間間隔に基づいてポイントをグループ化できます。
タグによる GROUP BY
GROUP BY <tag> を使用すると、指定したタグの値に基づいてポイントをグループ化できます。
構文
SELECT_clause FROM_clause [WHERE_clause] GROUP BY [*|<tag_key>[,<tag_key]]説明
GROUP BY * を使用すると、すべてのタグの値に基づいてポイントをグループ化できます。
GROUP BY <tag_key> を使用すると、指定したタグの値に基づいてポイントをグループ化できます。
GROUP BY <tag_key>,<tag_key> 形式を使用すると、複数のタグの値に基づいてポイントをグループ化できます。タグキーを配置する順序は結果に影響しません。
ステートメントに WHERE 句が含まれている場合は、WHERE 句の後に GROUP BY 句を配置する必要があります。
GROUP BY 句では正規表現を使用できます。
例
1 つのタグの値に基づいてポイントをグループ化する
SELECT MEAN("water_level") FROM "h2o_feet" GROUP BY "location"
name: h2o_feet
tags: location=coyote_creek
time mean // 平均
--------
1970-01-01T00:00:00Z5.359342451341401
name: h2o_feet
tags: location=santa_monica
time mean // 平均
--------
1970-01-01T00:00:00Z3.530863470081006上記の例では、このステートメントは water_level 列の各値グループの平均値をクエリするために使用されます。 water_level 列の値は、h2o_feet メジャーメントに含まれる location タグの値に基づいてグループ化されます。 MEAN() 関数は、water_level 値の各グループの平均値を計算するために使用されます。TSDB for InfluxDB® は 2 つの系列を返します。各系列は location に対応しています。
TSDB for InfluxDB® では、エポック 0 は 1970-01-01T00:00:00Z を示し、空のタイムスタンプとして使用されます。タイムスタンプが指定されていない場合、TSDB for InfluxDB® はタイムスタンプとしてエポック 0 を返します。たとえば、集計関数を使用し、境界付きの時間範囲を指定しない場合、TSDB for InfluxDB® はエポック 0 を返します。
複数のタグの値に基づいてポイントをグループ化する
SELECT MEAN("index") FROM "h2o_quality" GROUP BY location,randtag
name: h2o_quality
tags: location=coyote_creek, randtag=1
time mean // 平均
--------
1970-01-01T00:00:00Z50.69033760186263
name: h2o_quality
tags: location=coyote_creek, randtag=2
time mean // 平均
--------
1970-01-01T00:00:00Z49.661867544220485
name: h2o_quality
tags: location=coyote_creek, randtag=3
time mean // 平均
--------
1970-01-01T00:00:00Z49.360939907550076
name: h2o_quality
tags: location=santa_monica, randtag=1
time mean // 平均
--------
1970-01-01T00:00:00Z49.132712456344585
name: h2o_quality
tags: location=santa_monica, randtag=2
time mean // 平均
--------
1970-01-01T00:00:00Z50.2937984496124
name: h2o_quality
tags: location=santa_monica, randtag=3
time mean // 平均
--------
1970-01-01T00:00:00Z49.99919903884662上記の例では、このステートメントは index 列の各値グループの平均値をクエリするために使用されます。 index 列の値は、h2o_quality メジャーメントに含まれる location タグと randtag タグの値の組み合わせに基づいてグループ化されます。 MEAN() 関数は、index 値の各グループの平均値を計算するために使用されます。この例では、location タグには 2 つの値があり、randtag タグには 3 つの値があります。これらの値が組み合わされて、6 つのグループが作成されます。したがって、index 列の値は 6 つのグループにまとめられます。 GROUP BY 句では、複数のタグキーをカンマ (,) で区切る必要があります。
すべてのタグの値に基づいてポイントをグループ化する
SELECT MEAN("index") FROM "h2o_quality" GROUP BY *
name: h2o_quality
tags: location=coyote_creek, randtag=1
time mean // 平均
--------
1970-01-01T00:00:00Z50.69033760186263
name: h2o_quality
tags: location=coyote_creek, randtag=2
time mean // 平均
--------
1970-01-01T00:00:00Z49.661867544220485
name: h2o_quality
tags: location=coyote_creek, randtag=3
time mean // 平均
--------
1970-01-01T00:00:00Z49.360939907550076
name: h2o_quality
tags: location=santa_monica, randtag=1
time mean // 平均
--------
1970-01-01T00:00:00Z49.132712456344585
name: h2o_quality
tags: location=santa_monica, randtag=2
time mean // 平均
--------
1970-01-01T00:00:00Z50.2937984496124
name: h2o_quality
tags: location=santa_monica, randtag=3
time mean // 平均
--------
1970-01-01T00:00:00Z49.99919903884662上記の例では、このステートメントは index 列の各値グループの平均値をクエリするために使用されます。 index 列の値は、h2o_quality メジャーメントに含まれるすべてのタグの値の組み合わせに基づいてグループ化されます。 MEAN() 関数は、index 値の各グループの平均値を計算するために使用されます。
返される結果は、ステートメント SELECT MEAN("index") FROM "h2o_quality" GROUP BY location,randtag で返される結果と同じです。これは、h2o_quality メジャーメントには location タグと randtag タグのみが含まれているためです。
時間間隔による GROUP BY
GROUP BY time() を使用すると、指定された時間間隔に基づいてポイントをグループ化できます。
基本構文
SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>),[tag_key][fill(<fill_option>)]説明
GROUP BY time() 句を含むステートメントでは、SELECT 句に TSDB for InfluxDB® でサポートされている関数を含め、WHERE 句に時間範囲を指定する必要があります。 WHERE 句の後に GROUP BY 句を配置する必要があります。
time(time_interval):time_intervalパラメーターは、TSDB for InfluxDB® がクエリされたポイントをグループ化する基準となる期間を指定します。たとえば、time_intervalパラメーターの値が5mに設定されている場合、TSDB for InfluxDB® はポイントをクエリし、クエリされたポイントを 5 分間隔でグループ化します。クエリされたポイントのタイムスタンプは、WHERE句で指定された時間範囲内である必要があります。fill(<fill_option>): この関数はオプションです。 fill() 関数を使用すると、データが見つからない時間間隔の戻り値を指定できます。
スコープ
TSDB for InfluxDB® が基本的な GROUP BY time() 句を実行すると、TSDB for InfluxDB® は各時間間隔内に生成された生データと各結果のタイムスタンプを、time_interval パラメーターの値とシステムによってプリセットされた時間境界に基づいて決定します。
例
次の例では、次のデータがクエリされます。
SELECT "water_level","location" FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:30:00Z'
name: h2o_feet
--------------
time water_level location // 場所
2015-08-18T00:00:00Z8.12 coyote_creek
2015-08-18T00:00:00Z2.064 santa_monica
2015-08-18T00:06:00Z8.005 coyote_creek
2015-08-18T00:06:00Z2.116 santa_monica
2015-08-18T00:12:00Z7.887 coyote_creek
2015-08-18T00:12:00Z2.028 santa_monica
2015-08-18T00:18:00Z7.762 coyote_creek
2015-08-18T00:18:00Z2.126 santa_monica
2015-08-18T00:24:00Z7.635 coyote_creek
2015-08-18T00:24:00Z2.041 santa_monica
2015-08-18T00:30:00Z7.5 coyote_creek
2015-08-18T00:30:00Z2.051 santa_monica12 分間隔でポイントをグループ化する
SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:30:00Z' GROUP BY time(12m)
name: h2o_feet
--------------
time count // 件数
2015-08-18T00:00:00Z2
2015-08-18T00:12:00Z2
2015-08-18T00:24:00Z2上記の例では、COUNT() 関数は、h2o_feet メジャーメントの water_level フィールドを含むポイントの数を計算するために使用されます。条件は location = coyote_creek で、クエリされるポイントは 12 分間隔でグループ化されます。
各タイムスタンプに対応する count 値は、12 分間隔で生成されるポイントの数を示します。最初のタイムスタンプに対応する count 値は、2015-08-18T00:00:00Z から 2015-08-18T00:12:00Z まで ( 2015-08-18T00:12:00Z は除く) に生成されるポイントの数を示します。 2 番目のタイムスタンプに対応する count 値は、2015-08-18T00:12:00Z から 2015-08-18T00:24:00 まで ( 2015-08-18T00:24:00 は除く) に生成されるポイントの数を示します。
タグの値と 12 分間隔に基づいてポイントをグループ化する
SELECT COUNT("water_level") FROM "h2o_feet" WHERE time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:30:00Z' GROUP BY time(12m),"location"
name: h2o_feet
tags: location=coyote_creek
time count // 件数
---------
2015-08-18T00:00:00Z2
2015-08-18T00:12:00Z2
2015-08-18T00:24:00Z2
name: h2o_feet
tags: location=santa_monica
time count // 件数
---------
2015-08-18T00:00:00Z2
2015-08-18T00:12:00Z2
2015-08-18T00:24:00Z2上記の例では、COUNT() 関数は、water_level フィールドを含むポイントの数を計算するために使用され、ポイントは location タグの値と 12 分間隔に基づいてグループ化されます。 GROUP BY 句では、time() 関数とタグキーをカンマ (,) で区切る必要があります。
TSDB for InfluxDB® は 2 つの系列を返します。各系列は location に対応しています。各タイムスタンプに対応する count 値は、12 分間隔で生成されるポイントの数を示します。最初のタイムスタンプに対応する count 値は、2015-08-18T00:00:00Z から 2015-08-18T00:12:00Z まで ( 2015-08-18T00:12:00Z は除く) に生成されるポイントの数を示します。 2 番目のタイムスタンプに対応する count 値は、2015-08-18T00:12:00Z から 2015-08-18T00:24:00 まで ( 2015-08-18T00:24:00 は除く) に生成されるポイントの数を示します。
基本構文に関する FAQ
TSDB for InfluxDB® は、返されるタイムスタンプと値をどのように決定しますか?
TSDB for InfluxDB® が基本構文に基づいて定義されたステートメントを実行すると、TSDB for InfluxDB® は各時間間隔内に生成された生データと各結果のタイムスタンプを、GROUP BY time() 句で指定された間隔値とシステムによってプリセットされた時間境界に基づいて決定します。
例
生データ:
SELECT "water_level" FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:18:00Z'
name: h2o_feet
--------------
time water_level // 水位
2015-08-18T00:00:00Z8.12
2015-08-18T00:06:00Z8.005
2015-08-18T00:12:00Z7.887
2015-08-18T00:18:00Z7.762ステートメントと結果:
次の例では、指定された 12 分の時間範囲で生成されたデータがクエリされ、12 分間隔でグループ化されます。 2 つの結果が返されます。
SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:06:00Z' AND time <'2015-08-18T00:18:00Z' GROUP BY time(12m)
name: h2o_feet
time count // 件数
---------
2015-08-18T00:00:00Z1<-----このタイムスタンプはクエリの時間範囲の開始前であることに注意してください // このタイムスタンプは、クエリの時間範囲の開始前であることに注意してください。
2015-08-18T00:12:00Z 1TSDB for InfluxDB® は、システムによってプリセットされた時間境界の丸められた値を使用して、GROUP BY 句で指定された値に基づいて時間間隔の数を計算します。 TSDB for InfluxDB® は、WHERE 句で指定された時間範囲に基づいて時間間隔の数を計算しません。クエリされたデータのタイムスタンプは、WHERE 句で指定された時間範囲内でなければなりません。
次の表は、システムによってプリセットされた時間境界、GROUP BY time() 句を使用して指定された時間間隔、各時間間隔内に生成されたポイント、および各時間間隔に対して返されるタイムスタンプを示しています。
時間間隔番号 | システムによってプリセットされた時間境界 |
| ポイント | 返されたタイムスタンプ |
1 |
|
|
|
|
2 |
|
|
|
|
最初の 12 分の時間境界は 2015-08-18T00:00:00Z で始まり、2015-08-18T00:12:00Z の前で終わります。値が 8.005 の 1 つのポイントは、最初の時間境界と GROUP BY time() 句で指定された最初の時間間隔の両方に含まれます。指定された時間範囲の前に生成されたデータは、指定された時間範囲の開始時刻の前に発生するタイムスタンプが返される場合でも、クエリされません。
2 番目の 12 分の時間境界は 2015-08-18T00:12:00Z で始まり、2015-08-18T00:24:00Z の前で終わります。値が 7.887 の 1 つのポイントは、2 番目の時間境界と GROUP BY time() 句で指定された 2 番目の時間間隔の両方に含まれます。
GROUP BY time() 句に高度な構文を使用すると、TSDB for InfluxDB® によってプリセットされた時間境界の開始時刻を変更できます。高度な構文に基づいて定義されたステートメントを使用し、offset_interval パラメーターの値を 6m に設定すると、TSDB for InfluxDB® は次の結果を返します。
name: h2o_feet
time count // 件数
---------
2015-08-18T00:06:00Z2GROUP BY time() の高度な構文
SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>,<offset_interval>),[tag_key][fill(<fill_option>)]説明
GROUP BY time() 句に高度な構文を使用する場合は、SELECT 句に TSDB for InfluxDB® でサポートされている関数を含め、WHERE 句に時間範囲を指定する必要があります。 WHERE 句の後に GROUP BY 句を配置する必要があります。
time(time_interval,offset_interval):time_intervalパラメーターの詳細については、「GROUP BY time() 句の基本構文」の説明を参照してください。
offset_interval パラメーターは、TSDB for InfluxDB® によってプリセットされた時間境界を前方または後方にオフセットする基準となる値を指定します。 offset_interval パラメーターの値は、正の値または負の値にすることができます。
fill(<fill_option>): この関数はオプションです。 fill() 関数を使用すると、データが見つからない時間間隔の戻り値を指定できます。
スコープ
高度な GROUP BY time() 句を使用する場合、TSDB for InfluxDB® は各時間間隔内に生成された生データと各結果のタイムスタンプを、time_interval パラメーターと offset_interval パラメーターの値、およびシステムによってプリセットされた時間境界に基づいて決定します。
例
次の例では、次のデータがクエリされます。
SELECT "water_level" FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:54:00Z'
name: h2o_feet
--------------
time water_level // 水位
2015-08-18T00:00:00Z8.12
2015-08-18T00:06:00Z8.005
2015-08-18T00:12:00Z7.887
2015-08-18T00:18:00Z7.762
2015-08-18T00:24:00Z7.635
2015-08-18T00:30:00Z7.5
2015-08-18T00:36:00Z7.372
2015-08-18T00:42:00Z7.234
2015-08-18T00:48:00Z7.11
2015-08-18T00:54:00Z6.98218 分間隔でポイントをグループ化し、時間境界を前方にオフセットする
SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:06:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(18m,6m)
name: h2o_feet
time mean // 平均
--------
2015-08-18T00:06:00Z7.884666666666667
2015-08-18T00:24:00Z7.502333333333333
2015-08-18T00:42:00Z7.108666666666667上記の例では、このステートメントは water_level 列の各値グループの平均値をクエリするために使用されます。 water_level 列の値は 18 分間隔でグループ化され、TSDB for InfluxDB® によってプリセットされた時間境界は 6 分前方にオフセットされます。 MEAN() 関数は、water_level 値の各グループの平均値を計算するために使用されます。
offset_interval パラメーターを設定しない場合、システムは TSDB for InfluxDB® によってプリセットされた時間境界とタイムスタンプを使用します。 offset_interval パラメーターを設定しない場合、次の結果が返されます。
SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:06:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(18m)
name: h2o_feet
time mean // 平均
--------
2015-08-18T00:00:00Z7.946
2015-08-18T00:18:00Z7.6323333333333325
2015-08-18T00:36:00Z7.238666666666667
2015-08-18T00:54:00Z6.982次の表は、offset_interval パラメーターが設定されていない場合に、システムによってプリセットされた時間境界、GROUP BY time() 句を使用して指定された時間間隔、各時間間隔内に生成されたポイント、および各時間間隔に対して返されるタイムスタンプを示しています。
時間間隔番号 | システムによってプリセットされた時間境界 |
| ポイント | 返されたタイムスタンプ |
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
最初の 18 分の時間境界は 2015-08-18T00:00:00Z で始まり、2015-08-18T00:18:00Z の前で終わります。値が 8.005 と 7.887 の 2 つのポイントは、最初の時間境界と GROUP BY time() 句で指定された最初の時間間隔の両方に含まれます。指定された時間範囲の前に生成されたデータは、指定された時間範囲の開始時刻の前に発生するタイムスタンプが返される場合でも、クエリされません。
2 番目の 18 分の時間境界は 2015-08-18T00:18:00Z で始まり、2015-08-18T00:36:00Z の前で終わります。値が 7.762、7.635、7.5 の 3 つのポイントは、2 番目の時間境界と GROUP BY time() 句で指定された 2 番目の時間間隔の両方に含まれます。この場合、時間境界によって定義された範囲と時間間隔によって定義された範囲は同じです。
4 番目の 18 分の時間境界は 2015-08-18T00:54:00Z で始まり、2015-08-18T01:12:00Z の前で終わります。値が 6.982 の 1 つのポイントは、4 番目の時間境界と GROUP BY time() 句で指定された 4 番目の時間間隔の両方に含まれます。
offset_interval パラメーターを設定すると、返される時間境界とタイムスタンプは offset_interval パラメーターの値に基づいてオフセットされます。
時間間隔番号 | システムによってプリセットされた時間境界 |
| ポイント | 返されたタイムスタンプ |
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
| NA | NA | NA |
時間境界によって定義される範囲は、offset_interval パラメーターの値に基づいて 6 分前にオフセットされます。このようにして、時間境界によって定義される各範囲と、時間間隔によって定義される範囲は同じになります。TSDB for InfluxDB® は、各時間間隔内で生成される各ポイント グループの平均値を計算します。時間間隔は 6 分前にオフセットされます。返されるタイムスタンプ、境界時間範囲の開始時刻、および GROUP BY time() 句で指定された時間間隔の開始時刻は一致します。
4 番目の時間境界は、offset_interval パラメーターの値に基づいて定義されますが、指定された時間範囲には含まれません。そのため、4 番目の時間間隔内に生成されたデータはクエリされません。
18 分間隔でポイントをグループ化し、時間境界を後方にオフセットする
SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:06:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(18m,-12m)
name: h2o_feet
time mean // 平均
--------
2015-08-18T00:06:00Z7.884666666666667
2015-08-18T00:24:00Z7.502333333333333
2015-08-18T00:42:00Z7.108666666666667上記の例では、このステートメントは water_level 列の各値グループの平均値をクエリするために使用されます。 water_level 列の値は 18 分間隔でグループ化され、TSDB for InfluxDB® によってプリセットされた時間境界は 12 分後方にオフセットされます。 MEAN() 関数は、water_level 値の各グループの平均値を計算するために使用されます。
このクエリの結果は、データを 18 分間隔でグループ化し、時間境界を前方にオフセットする前のクエリの結果と同じです。このステートメントでは、offset_interval パラメーターの値は負の値に設定され、前のステートメントでは、offset_interval パラメーターの値は正の値に設定されています。 2 つのステートメントのクエリパフォーマンスは同じです。 offset_interval パラメーターの値を指定する場合は、有効で適切な値を使用してください。
offset_interval パラメーターを設定しない場合、システムは TSDB for InfluxDB® によってプリセットされた時間境界とタイムスタンプを使用します。 offset_interval パラメーターを設定しない場合、次の結果が返されます。
SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:06:00Z' AND time <='2015-08-18T00:54:00Z' GROUP BY time(18m)
name: h2o_feet
time mean // 平均
--------
2015-08-18T00:00:00Z7.946
2015-08-18T00:18:00Z7.6323333333333325
2015-08-18T00:36:00Z7.238666666666667
2015-08-18T00:54:00Z6.982次の表は、offset_interval パラメーターが設定されていない場合に、システムによってプリセットされた時間境界、GROUP BY time() 句を使用して指定された時間間隔、各時間間隔内に生成されたポイント、および各時間間隔に対して返されるタイムスタンプを示しています。
時間間隔番号 | システムによってプリセットされた時間境界 |
| ポイント | 返されたタイムスタンプ |
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
最初の 18 分の時間境界は 2015-08-18T00:00:00Z で始まり、2015-08-18T00:18:00Z の前で終わります。値が 8.005 と 7.887 の 2 つのポイントは、最初の時間境界と GROUP BY time() 句で指定された最初の時間間隔の両方に含まれます。指定された時間範囲の前に生成されたデータは、指定された時間範囲の開始時刻の前に発生するタイムスタンプが返される場合でも、クエリされません。
2 番目の 18 分の時間境界は 2015-08-18T00:18:00Z で始まり、2015-08-18T00:36:00Z の前で終わります。値が 7.762、7.635、7.5 の 3 つのポイントは、2 番目の時間境界と GROUP BY time() 句で指定された 2 番目の時間間隔の両方に含まれます。この場合、時間境界によって定義された範囲と時間間隔によって定義された範囲は同じです。
4 番目の 18 分の時間境界は 2015-08-18T00:54:00Z で始まり、2015-08-18T01:12:00Z の前で終わります。値が 6.982 の 1 つのポイントは、4 番目の時間境界と GROUP BY time() 句で指定された 4 番目の時間間隔の両方に含まれます。
offset_interval パラメーターを設定すると、返される時間境界とタイムスタンプは offset_interval パラメーターの値に基づいてオフセットされます。
時間間隔番号 | システムによってプリセットされた時間境界 |
| ポイント | 返されたタイムスタンプ |
1 |
| NA | NA | NA |
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
時間境界によって定義される範囲は、offset_interval パラメーターの値に基づいて 12 分前にオフセットされます。このようにして、時間境界によって定義される各範囲と時間間隔によって定義される範囲は同じになります。TSDB for InfluxDB® は、各時間間隔内で生成される各ポイント グループの平均値を計算します。時間間隔は 6 分前にオフセットされます。返されるタイムスタンプ、境界時間範囲の開始時刻、および GROUP BY time() 句で指定された時間間隔の開始時刻は一致します。
offset_interval パラメーターの値に基づいて定義された最初の時間境界は、指定された時間範囲内ではありません。そのため、最初の時間間隔内に生成されたデータはクエリされません。
12 分間隔でポイントをグループ化し、時間境界を前方にオフセットする
次の例では、「基本構文に関する FAQ」の部分で使用されているステートメントに基づいてステートメントが提供されます。
SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:06:00Z' AND time <'2015-08-18T00:18:00Z' GROUP BY time(12m,6m)
name: h2o_feet
time count // 件数
---------
2015-08-18T00:06:00Z2上記の例では、COUNT() 関数は water_level フィールドを含むポイントの数を計算するために使用されます。ポイントは 12 分間隔でグループ化され、時間境界は 6 分前方にオフセットされます。
offset_interval パラメーターを設定しない場合、システムは TSDB for InfluxDB® によってプリセットされた時間境界とタイムスタンプを使用します。 offset_interval パラメーターを設定しない場合、次の結果が返されます。
SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-08-18T00:06:00Z' AND time <'2015-08-18T00:18:00Z' GROUP BY time(12m)
name: h2o_feet
time count // 件数
---------
2015-08-18T00:00:00Z1
2015-08-18T00:12:00Z1次の表は、offset_interval パラメーターが設定されていない場合に、システムによってプリセットされた時間境界、GROUP BY time() 句を使用して指定された時間間隔、各時間間隔内に生成されたポイント、および各時間間隔に対して返されるタイムスタンプを示しています。
時間間隔番号 | システムによってプリセットされた時間境界 |
| ポイント | 返されたタイムスタンプ |
1 |
|
|
|
|
2 |
|
|
|
|
最初の 12 分間の時間境界は、2015-08-18T00:00:00Z から始まり、2015-08-18T00:12:00Z の前で終了します。値が 8.005 である 1 つのポイントは、最初の時間境界と、GROUP BY time() 句で指定された最初の時間間隔の両方に該当します。指定された時間範囲より前に生成されたデータは、指定された時間範囲の開始時刻より前に発生するタイムスタンプが返される場合でも、クエリされません。
2 番目の 12 分の時間境界は、2015-08-18T00:12:00Z で開始し、2015-08-18T00:24:00Z の前に終了します。値が 7.887 である 1 つのポイントは、2 番目の時間境界と、GROUP BY time() 句で指定された 2 番目の時間間隔の両方に該当します。
offset_interval パラメーターを設定すると、返される時間境界とタイムスタンプは offset_interval パラメーターの値に基づいてオフセットされます。
時間間隔番号 | システムによってプリセットされた時間境界 |
| ポイント | 返されたタイムスタンプ |
1 |
|
|
|
|
2 |
| NA | NA | NA |
時間境界によって定義される範囲は、offset_interval パラメーターの値に基づいて 6 分前にオフセットされます。このようにして、時間境界によって定義される各範囲と、時間間隔によって定義される範囲は同じになります。InfluxDB® 用 TSDB は、各時間間隔内で生成される各ポイントグループの数をカウントします。時間間隔は 6 分前にオフセットされます。返されるタイムスタンプ、境界時間範囲の開始時刻、および GROUP BY time() 句で指定された時間間隔の開始時刻は一致します。
offset_interval パラメーターの値に基づいて定義された 2 番目の時間境界は、指定された時間範囲に含まれません。そのため、2 番目の時間間隔内に生成されたデータはクエリされません。
GROUP BY time() および fill()
fill() 関数を使用すると、データが見つからない時間間隔の戻り値を指定できます。
構文
SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(time_interval,[<offset_interval])[,tag_key][fill(<fill_option>)]説明
GROUP BY time() 句で定義された時間間隔内にデータが見つからない場合、TSDB for InfluxDB® はデフォルトで null を返します。 fill() 関数を使用すると、デフォルト値を指定された値に変更できます。 GROUP BY 句にタグや time() 関数などの複数のオブジェクトを指定する場合は、GROUP BY 句の後に fill() 関数を配置する必要があります。
fill_option
数値: 時間間隔内にデータが見つからない場合、指定された数値が返されます。
linear: 時間間隔内にデータが見つからない場合、線形補間 の結果が返されます。none: 時間間隔内にデータが見つからない場合、タイムスタンプも値も返されません。null: 時間間隔内にデータが見つからない場合、タイムスタンプとnull値を含む結果が返されます。この場合、結果は fill() が使用されていない場合に返される結果と同じです。previous: 時間間隔内にデータが見つからない場合、前の時間間隔の値が結果として返されます。
例 1: fill(100) が使用されていない
SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Z例 2: fill(100) が使用されている
SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m) fill(100)
name: h2o_feet
--------------
ime max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Z100fill(100) は、時間間隔内にデータが見つからない場合の戻り値として 100 を指定するために使用されます。この例では、4 番目の時間間隔内にデータが見つかりません。ステートメントで fill(100) が使用されているため、戻り値は 100 です。
例 3: fill(linear) が使用されていない
SELECT MEAN("tadpoles") FROM "pond" WHERE time >='2016-11-11T21:00:00Z' AND time <='2016-11-11T22:06:00Z' GROUP BY time(12m)
name: pond
time mean // 平均
--------
2016-11-11T21:00:00Z1
2016-11-11T21:12:00Z
2016-11-11T21:24:00Z3
2016-11-11T21:36:00Z
2016-11-11T21:48:00Z
2016-11-11T22:00:00Z6例 4: fill(linear) が使用されている
SELECT MEAN("tadpoles") FROM "pond" WHERE time >='2016-11-11T21:00:00Z' AND time <='2016-11-11T22:06:00Z' GROUP BY time(12m) fill(linear)
name: pond
time mean // 平均
--------
2016-11-11T21:00:00Z1
2016-11-11T21:12:00Z2
2016-11-11T21:24:00Z3
2016-11-11T21:36:00Z4
2016-11-11T21:48:00Z5
2016-11-11T22:00:00Z6fill(linear) は、時間間隔内にデータが見つからない場合の戻り値として線形補間の結果を指定するために使用されます。
例 2 では、NOAA_water_database データベースにデータが格納されていません。 fill(linear) を使用するには、少量の正規データを含むデータセットを作成する必要があります。
例 5: fill(none) が使用されていない
SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Z例 6: fill(none) が使用されている
SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m) fill(none)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235fill(none) を使用すると、時間間隔内にデータが見つからない場合、タイムスタンプも値も返されません。
例 7: fill(null) が使用されていない
SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Z例 8: fill(null) が使用されている
SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m) fill(null)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Zfill(null) は、時間間隔内にデータが見つからない場合の戻り値として null を指定するために使用されます。 fill(null) が使用されている場合に返される結果は、fill(null) が使用されていない場合に返される結果と同じです。
例 9: fill(previous) が使用されていない
SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Z例 10: fill(previous) が使用されている
> SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T16:00:00Z' AND time <='2015-09-18T16:42:00Z' GROUP BY time(12m) fill(previous)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:00:00Z3.599
2015-09-18T16:12:00Z3.402
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Z3.235この例では、fill(previous) を使用して、4 番目の時間間隔の戻り値として 3.235 を指定しています。この値は、前の時間間隔の戻り値です。
fill() 関数に関する FAQ
WHERE 句で指定された時間範囲内にデータが見つからない場合、fill() 関数は何を返しますか?
指定された時間範囲内にデータが見つからない場合、TSDB for InfluxDB® は fill() 関数を無視します。データは返されません。
例:
指定された時間範囲内に water_level フィールドを含むポイントが見つからないため、次のステートメントを実行した後、TSDB for InfluxDB® はデータを返しません。ステートメントの fill(800) は結果に影響しません。
SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >='2015-09-18T22:00:00Z' AND time <='2015-09-18T22:18:00Z' GROUP BY time(12m) fill(800)
何が返されますかfill(previous) は、前の時間間隔が指定された時間範囲内にない場合、何を返しますか?
時間間隔の前の時間間隔が指定された時間範囲内にない場合、TSDB for InfluxDB® は fill(previous) を無視します。
例:
次の例では、指定された時間範囲は 2015-09-18T16:24:00Z から 2015-09-18T16:54:00Z です。 fill(previous) は、2015-09-18T16:36:00Z の値として 2015-09-18T16:24:00Z の値を返します。
SELECT MAX("water_level") FROM "h2o_feet" WHERE location ='coyote_creek' AND time >='2015-09-18T16:24:00Z' AND time <='2015-09-18T16:54:00Z' GROUP BY time(12m) fill(previous)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:24:00Z3.235
2015-09-18T16:36:00Z3.235
2015-09-18T16:48:00Z4次の例では、指定された時間範囲は 2015-09-18T16:36:00Z から 2015-09-18T16:54:00Z です。このクエリでは、2015-09-18T16:24:00Z が指定された時間範囲内にないため、fill(previous) は 2015-09-18T16:36:00Z の値として 2015-09-18T16:24:00Z の値を返しません。
SELECT MAX("water_level") FROM "h2o_feet" WHERE location ='coyote_creek' AND time >='2015-09-18T16:36:00Z' AND time <='2015-09-18T16:54:00Z' GROUP BY time(12m) fill(previous)
name: h2o_feet
--------------
time max // 最大値
2015-09-18T16:36:00Z
2015-09-18T16:48:00Z4何が返されますかfill(linear) は、前または後の時間間隔が指定された時間範囲内にない場合、何を返しますか?
時間間隔の前または後の時間間隔が指定された時間範囲内にない場合、fill(linear) はその時間間隔の値を返しません。
例:
次の例では、指定された時間範囲は 2016-11-11T21:24:00Z から 2016-11-11T22:06:00Z です。 fill(linear) は、2016-11-11T21:24:00Z と 2016-11-11T22:00:00Z に対応する値に基づいて、2016-11-11T21:36:00Z と 2016-11-11T21:48:00Z の値を返します。
SELECT MEAN("tadpoles") FROM "pond" WHERE time >'2016-11-11T21:24:00Z' AND time <='2016-11-11T22:06:00Z' GROUP BY time(12m) fill(linear)
name: pond
time mean // 平均
--------
2016-11-11T21:24:00Z3
2016-11-11T21:36:00Z4
2016-11-11T21:48:00Z5
2016-11-11T22:00:00Z6次の例では、指定された時間範囲は 2016-11-11T21:36:00Z から 2016-11-11T22:06:00Z です。このクエリでは、2016-11-11T21:24:00Z が指定された時間範囲内にないため、TSDB for InfluxDB® は線形補間を実行できないため、fill(linear) は 2016-11-11T21:36:00Z と 2016-11-11T21:48:00Z の値を返しません。
SELECT MEAN("tadpoles") FROM "pond" WHERE time >='2016-11-11T21:36:00Z' AND time <='2016-11-11T22:06:00Z' GROUP BY time(12m) fill(linear)
name: pond
time mean // 平均
--------
2016-11-11T21:36:00Z
2016-11-11T21:48:00Z
2016-11-11T22:00:00Z6上記の例で使用されているデータは、NOAA_water_database データベースに格納されていません。 fill(linear) を使用するには、少量の正規データを含むデータセットを作成する必要があります。