すべてのプロダクト
Search
ドキュメントセンター

:マルチ値データのクエリ

最終更新日:Mar 29, 2026

/api/mquery エンドポイントを使用して、メトリックごとに複数のフィールドを格納するマルチバリアント(多変量)データポイントをクエリします。ユニバリアント(単変量)データには代わりに /api/query を使用してください。

重要

書き込みパスとクエリパスはデータモデルによって異なります。/api/mput を使用してマルチバリアントデータを書き込み、/api/mquery を使用してクエリします。/api/put および /api/query はユニバリアントデータ専用です。これら 2 つのモデルは相互に交換できません。

リクエスト

エンドポイント

パスメソッド
/api/mqueryPOST

リクエスト本文のパラメーター

パラメーター必須デフォルト説明
startLongはい開始時刻。秒またはミリ秒単位の UNIX タイムスタンプを受け付けます。「タイムスタンプの単位」をご参照ください。
endLongいいえ現在のサーバー時刻終了時刻。秒またはミリ秒単位の UNIX タイムスタンプを受け付けます。「タイムスタンプの単位」をご参照ください。
queries配列はいサブクエリオブジェクトの配列です。「サブクエリのパラメーター」をご参照ください。
msResolutionブール値いいえfalsetrue の場合、秒単位で格納されたデータポイントのタイムスタンプをミリ秒単位で返します。ミリ秒単位で格納されたデータには影響しません(これらのデータは常にミリ秒単位のタイムスタンプを返します)。
hintオブジェクトいいえインデックス使用量を制限するためのクエリヒントワードです。TSDB V2.6.1 以降が必要です。「クエリヒントワード」をご参照ください。

サブクエリのパラメーター

queries 配列内の各オブジェクトは、以下のパラメーターをサポートします:

パラメーター必須デフォルト説明
metric文字列はいメトリック名です。
fields配列はいフィールドクエリオブジェクトの配列です。「フィールドクエリのパラメーター」をご参照ください。
rateブール値いいえfalse連続する値間の成長率を計算します:(Vt − Vt-1) / (t − t-1)
deltaブール値いいえfalse連続する値間の差分(デルタ)を計算します:Vt − Vt-1。「デルタ演算子」をご参照ください。
limit整数いいえ0タイムラインあたりに返す最大データポイント数です。0 は制限なしを意味します。ページ分割対応のマルチバリアントクエリにのみ適用され、個別のフィールドクエリには適用されません。
offset整数いいえ0タイムラインあたりにスキップするデータポイント数です。limit と組み合わせてページ分割に使用します。
dpValue文字列いいえ返されるデータポイントを値でフィルターします。サポートされる演算子: ><=<=>=!=。文字列として設定した場合、= および != のみがサポートされます。
preDpValue文字列いいえ集約前のスキャン中にデータポイントをフィルターします。dpValue(集約後の結果をフィルター)とは異なり、preDpValue は一致するデータポイントをすべてのクエリおよび計算から除外します。
downsample文字列いいえダウンサンプリング式です。「ダウンサンプリング」をご参照ください。
tagsオブジェクトいいえデータをフィルターするためのタグのキーと値のペアです。filters と競合します — 両方が指定された場合、JSON 内で後に出た方の設定が有効になります。
filters配列いいえタグベースのフィルターを行うためのフィルター・オブジェクトです。tags と競合します。「フィルター」をご参照ください。
hintオブジェクトいいえサブクエリレベルのクエリヒントワードです。このサブクエリに対してトップレベルのヒントワードを上書きします。

フィールドクエリのパラメーター

fields 配列内の各オブジェクトは、以下のパラメーターをサポートします:

パラメーター必須デフォルト説明
aggregator文字列はい適用する集約関数です。none を指定すると集約をスキップします。同一サブクエリ内のいずれかのフィールドクエリで指定した場合、そのサブクエリ内のすべてのフィールドクエリで指定する必要があります。
field文字列はいフィールド名です。* を使用すると、そのメトリックのすべてのフィールドをクエリできます。
alias文字列いいえ返されるフィールド名のエイリアスです。
downsample文字列いいえダウンサンプリング式です。同一サブクエリ内のすべてのフィールドクエリで同じ間隔を使用する必要があります。
rateブール値いいえfalseこのフィールドの成長率を計算します。
dpValue文字列いいえこのフィールドの返される値をフィルターします。サポートされる演算子: ><=<=>=!=。フィールドごとに独立して適用されます(フィールド間では適用されません)。
where文字列いいえfield* の場合にのみ使用されます。返される結果の前にフィールドをフィルターし、dpValue と同じロジックを使用します。例:speed>10
1 つのクエリで、すべてのサブクエリを含めたフィールド値の合計は最大 200 個までです。カウント方法:すべてのサブクエリ内の field 値の数を、すべての fields 配列で合計します。

タイムスタンプの単位

TSDB は数値の範囲に基づいてタイムスタンプの単位を決定します:

範囲単位対応する日付範囲
[4284768, 9999999999]1970-02-20 ~ 2286-11-21
[10000000000, 9999999999999]ミリ秒1970-04-27 ~ 2286-11-21
両方の有効値の範囲外無効

これらのルールは /api/put/api/mput/api/query、および /api/mquery に適用されます。

単一時点のデータをクエリするには、start および end を同じ値に設定します。例:"start": 1356998400, "end": 1356998400

サンプルリクエスト

POST /api/mquery

{
  "start": 1346846400,
  "end": 1346846411,
  "msResolution": true,
  "queries": [
    {
      "metric": "wind",
      "fields": [
        {
          "field": "speed",
          "aggregator": "sum",
          "downsample": "2s-last",
          "alias": "speed_sum"
        },
        {
          "field": "*",
          "aggregator": "sum",
          "downsample": "2s-count",
          "where": "speed>10"
        }
      ]
    }
  ]
}

ダウンサンプリング

ダウンサンプリングは、固定時間間隔でデータを集約し、返されるデータポイント数を削減します。1 秒単位の粒度が不要な長期間のクエリ時に使用します。

式の形式

<間隔><単位>-<集約関数>[-塗りつぶしポリシー]

`間隔`560 などの数値です。0all を使用すると、範囲内のすべてのデータポイントを 1 つの値に集約します。

`単位`

単位意味
s
m
h
d
n
y

c を追加すると、カレンダーによる配置(例: 1dc は当日 00:00 からの 24 時間を表します)が有効になります。c を指定しない場合、タイムスタンプの配置は次の式で行われます:配置済みタイムスタンプ = データタイムスタンプ − (データタイムスタンプ % 間隔)

`集約関数` の選択肢:

演算子説明
avg平均値
countデータポイント数
first最初の値(配置済みタイムスタンプ)
last最後の値(配置済みタイムスタンプ)
min最小値(配置済みタイムスタンプ)
max最大値(配置済みタイムスタンプ)
sum値の合計
zimsum値の合計
rfirstオリジナル(未配置)タイムスタンプ付きの最初の値
rlastオリジナル(未配置)タイムスタンプ付きの最後の値
rminオリジナル(未配置)タイムスタンプ付きの最小値
rmaxオリジナル(未配置)タイムスタンプ付きの最大値
rfirstrlastrmin、および rmax 演算子は、塗りつぶしポリシーとともに使用できません。

時間ウィンドウの拡張

downsample を指定すると、TSDB は自動的にクエリ範囲を両側に 1 つの間隔分拡張します。たとえば、範囲が [1346846401, 1346846499] で間隔が 5m の場合、実際のクエリ範囲は [1346846101, 1346846799] になります。

フィル ポリシー

タイムバケットにデータポイントがない場合、塗りつぶしポリシーにより、そのバケットに対して報告される値が決定されます。

フィル ポリシー
none値は塗りつぶされません。これがデフォルト値です。
nanNaN
nullnull
zero0
linear線形補間に基づいて計算された値。
previous前の値。
near隣接する値。
after次の値。
fixedユーザー指定の固定値。「固定塗りつぶしポリシー」をご参照ください。

固定塗りつぶしポリシー

フォーマットに固定値を # を使用して追加します:

<間隔><単位>-<集約関数>-fixed#<数値>

固定値は正または負の値を指定できます。例:1h-sum-fixed#61h-avg-fixed#-8

ダウンサンプリングの例

有効なダウンサンプリング式の例: 1m-avg1h-sum-zero1h-sum-near

重要

downsample パラメーターはフィールドクエリでは任意です。ダウンサンプリングを明示的に無効にするには、null または空文字列を指定します:{"downsample": null} または {"downsample": ""}。サブクエリ内のいずれかのフィールドクエリで downsample を指定した場合、そのサブクエリ内のすべてのフィールドクエリで同じ間隔を指定する必要があります。

集約関数

ダウンサンプリング後、複数のタイムラインが配置済みタイムスタンプを共有することがあります。aggregator は、各タイムスタンプにおける値を集約することで、それらのタイムラインを 1 つにマージします。タイムラインが 1 つのみの場合、集約は実行されません。

重要

aggregator はすべてのフィールドクエリで必須です。none を指定すると集約をスキップできます。サブクエリ内のいずれかのフィールドクエリで aggregator を指定した場合、そのサブクエリ内のすべてのフィールドクエリで指定する必要があります。サブクエリ内で部分的な集約はサポートされていません。

補間

複数のタイムラインを集約する場合、あるタイムラインが配置済みタイムスタンプに値を持たず、他のタイムラインが持つ場合、TSDB は欠落しているタイムラインに対して補間値を計算します。これは塗りつぶしポリシーが設定されていない場合にのみ適用されます。

補間方法は集約関数によって異なります:

アグリゲーター補間方法
avg線形補間
countゼロを補間
min線形補間
max線形補間
mimmin最大値を補間
mimmax最小値を補間
noneゼロを補間
sum線形補間
zimsumゼロを補間

デルタ演算子

deltatrue に設定されている場合、dps の各キーと値のペア内の value は、計算されたデルタ (Vt − Vt-1) で置き換えられます。

重要

元の結果に n 個のキーと値のペアが含まれる場合、デルタ結果には n-1 個のペアが含まれます — 最初のペアは、比較可能な先行値がないため破棄されます。デルタ演算子はダウンサンプリング後にも適用されます。

`deltaOptions` のパラメーター

パラメーター必須デフォルト説明
counterブール値いいえfalseメトリック値を単調増加または単調減少するカウンターとして扱います。サーバーは単調性を検証しません。
counterMax整数いいえ許容される絶対デルタの最大値です。このしきい値を超えるデルタは異常と見なされ、破棄または 0 にリセットされます。countertrue の場合にのみ適用されます。
dropResetブール値いいえfalsecounterMax が必要です。異常なデルタが検出された場合、true はそれを破棄し、false(または省略)はそれを 0 にリセットします。

{
  "start": 1346046400,
  "end": 1347056500,
  "queries": [
    {
      "metric": "sys.cpu.0",
      "aggregator": "none",
      "downsample": "5s-avg",
      "delta": true,
      "deltaOptions": {
        "counter": true,
        "counterMax": 100
      },
      "dpValue": ">=50",
      "tags": {
        "host": "localhost",
        "appName": "hitsdb"
      }
    }
  ]
}

limit および offset を使用したページ分割

limit および offset を使用して、複数のタイムラインにわたる結果をページ分割します。

  • limit:ページあたりのタイムラインごとの最大データポイント数です。0 は制限なし(デフォルト)を意味します。

  • offset:タイムラインごとにスキップするデータポイント数です。

重要

limit および offset は負の値を指定できません。これらのパラメーターはページ分割対応のマルチバリアントクエリに適用され、単一フィールドクエリには使用できません。

例: 1001 番目から 1500 番目までのデータポイントを返すには、limit500offset1000 に設定します。

{
  "start": 1346846400,
  "end": 1346846411,
  "msResolution": true,
  "queries": [
    {
      "metric": "wind",
      "fields": [
        {
          "field": "*",
          "aggregator": "sum",
          "downsample": "2s-count"
        }
      ],
      "filters": [
        {
          "filter": "IOTE_8859_0005|IOTE_8859_0004",
          "tagk": "sensor",
          "type": "literal_or"
        }
      ],
      "limit": 500,
      "offset": 1000
    }
  ]
}

フィルター

フィルターは、タグ値に基づいてクエリに含めるタイムラインを選択します。filters パラメーターは tags と競合します — JSON 内で両方が出現した場合、後に出た方の設定が有効になります。

フィルター・オブジェクトのパラメーター

パラメーター必須デフォルト説明
type文字列はいフィルターの種類です。以下のフィルターの種類をご参照ください。
tagk文字列はいフィルター対象のタグキーです。
filter文字列はいフィルター式です。
groupByブール値いいえfalseタグ値で結果をグループ化します。

フィルターの種類

種類説明
literal_orweb01|web02各 tagv の値が集約されます。このフィルターは大文字小文字を区別します。
wildcard*.example.com各 tagv の値のうち、指定されたワイルドカードを含むものだけが集約されます。このフィルターは大文字小文字を区別します。

また、タグのショートハンドを使用してフィルターを指定することもできます:

  • tagk = *:そのキーのすべてのタグ値をグループ化し、個別の値ごとに集約します。

  • tagk = tagv1|tagv2tagv1 の値をまとめてグループ化し、tagv2 の値をまとめてグループ化します。

フィルターを使用した例

{
  "start": 1346846400,
  "end": 1346846411,
  "msResolution": true,
  "queries": [
    {
      "metric": "wind",
      "fields": [
        {
          "field": "speed",
          "aggregator": "none",
          "alias": "column_speed"
        },
        {
          "field": "*",
          "aggregator": "none",
          "alias": "column_"
        }
      ],
      "filters": [
        {
          "filter": "IOTE_8859_0005|IOTE_8859_0004",
          "tagk": "sensor",
          "type": "literal_or"
        }
      ]
    }
  ]
}

レスポンス

正常なクエリでは HTTP 200 ステータスコードと JSON 配列が返されます。

レスポンスのフィールド

フィールド説明
metricメトリック名です。
columns返されるカラムです。
tags値が集計されなかったタグ(正確なフィルターとして適用されました)。
aggregatedTagsタイムライン全体で集約されたタグの値です。
valuesタプルの配列です。各タプルは columns でキー付けされたデータ行に対応します。

例:aggregator を `none` に設定した場合

一致したタイムラインごとに 1 つの結果オブジェクトを返します(センサー間での集約は行いません):

[
  {
    "metric": "wind",
    "columns": [
      "timestamp",
      "column_speed",
      "column_description",
      "column_direction",
      "column_level",
      "column_speed"
    ],
    "tags": {
      "city": "hangzhou",
      "country": "china",
      "province": "zhejiang",
      "sensor": "IOTE_8859_0005"
    },
    "aggregatedTags": [],
    "values": [
      [1346846406000, null, "Fresh breeze", "East", 0.5, null],
      [1346846407000, null, "Fresh breeze", "South", 1.5, null]
    ]
  },
  {
    "metric": "wind",
    "columns": [
      "timestamp",
      "column_speed",
      "column_description",
      "column_direction",
      "column_level",
      "column_speed"
    ],
    "tags": {
      "city": "hangzhou",
      "country": "china",
      "province": "zhejiang",
      "sensor": "IOTE_8859_0004"
    },
    "aggregatedTags": [],
    "values": [
      [1346846400000, 40.4, "Fresh breeze", "East", 0.4, 40.4],
      [1346846401000, 41.4, "Fresh breeze", "South", 1.4, 41.4],
      [1346846402000, 42.4, "Fresh breeze", "West", 2.4, 42.4],
      [1346846403000, 43.4, "Fresh breeze", "North", 3.4, 43.4]
    ]
  }
]

例:aggregator を `avg` に設定した場合

都市内のすべてのセンサーにわたる平均風速および平均レベルを返します:

[
  {
    "metric": "wind",
    "columns": ["timestamp", "avg_level", "avg_speed"],
    "tags": {
      "city": "hangzhou"
    },
    "aggregatedTags": ["country", "province", "sensor"],
    "values": [
      [1346846400000, 0.25, 40.25],
      [1346846401000, 1.25, 41.25],
      [1346846402000, 2.5, 42.5],
      [1346846411000, 5.5, null]
    ]
  }
]

クエリ ヒント

クエリヒントワードは、TSDB に対してタイムライン解決時にどのタグインデックスを使用(またはスキップ)するかを指示し、あるタグセットによってターゲットとなるタイムラインの集合が、他のタグセットの既知のサブセットである場合に応答時間を短縮します。

重要

TSDB V2.6.1 以降が必要です。

フォーマット

hint.tagk の下にタグキー名を指定し、値として 0(インデックスをスキップ)または 1(インデックスを使用)を設定します。1 つのヒントワード内では、すべての値が 0 またはすべてが 1 である必要があります — 混在するとエラーが発生します。

サブクエリにスコープを限定したヒントワード

{
  "queries": [
    {
      "metric": "demo.mf",
      "tags": {
        "sensor": "IOTE_8859_0001",
        "city": "hangzhou",
        "province": "zhejiang",
        "country": "china"
      },
      "fields": ["speed"],
      "hint": {
        "tagk": { "dc": 1 }
      }
    }
  ]
}

クエリ全体にスコープを限定したヒントワード

{
  "queries": [
    {
      "metric": "demo.mf",
      "tags": {
        "sensor": "IOTE_8859_0001",
        "city": "hangzhou",
        "province": "zhejiang",
        "country": "china"
      },
      "fields": ["speed"]
    }
  ],
  "hint": {
    "tagk": { "dc": 1 }
  }
}

エラー:同一ヒントワード内で 0 と 1 を混在させた場合

{
  "start": 1346846400,
  "end": 1346846400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "tags": {
        "dc": "lga",
        "host": "web01"
      }
    }
  ],
  "hint": {
    "tagk": {
      "dc": 1,
      "host": 0
    }
  }
}

戻り値:

{
  "error": {
    "code": 400,
    "message": "ヒントワードの値は 0 または 1 のみであり、0 と 1 を同時に指定することはできません",
    "details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
  }
}

エラー:無効なヒントワードの値

{
  "start": 1346846400,
  "end": 1346846400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "tags": {
        "dc": "lga",
        "host": "web01"
      }
    }
  ],
  "hint": {
    "tagk": {
      "dc": 100
    }
  }
}

返されるレスポンス:

{
  "error": {
    "code": 400,
    "message": "ヒントワードの値は 0 または 1 のみであり、'100' が渡されたことが検出されました",
    "details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
  }
}