コンテンツにスキップ

HTTPクエリ

Query APIのエンドポイントは、/db/queryです。

このAPIは、SELECTだけでなく、CREATE TABLEALTER TABLEINSERTなど、すべてのSQL文に対応しています。

/db/query APIは、GETPOST(JSON)、*POST(form-data)*に対応し、どの方式でも同じパラメーターを使用できます。

たとえば、GETではformatGET /db/query?format=csvのようなクエリパラメーターで指定でき、 POST-JSONでは、{ "format": "csv" }のようなJSONフィールドで渡せます。

クエリの例

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 2
```

パラメーター

クエリパラメーター

パラメーター既定値説明
q必須実行するSQL文です。
pSQLプレースホルダーに渡すバインドパラメーターです。
- ?の位置パラメーター(JSON配列):["name", 1234, 1.23, true] Since v8.5.0
- :nameの名前付きパラメーター(JSONオブジェクト):{"name": "Alice", "n": 2} Since v8.7.0
db複数データベース環境で使用する対象データベース名です。 Since v8.7.0
formatjson結果のデータ形式:json、csv、box、ndjson
timeformatns時刻の単位:s、ms、us、ns
tzUTCタイムゾーン:UTC、Local、地域指定
binaryformathexバイナリのエンコーディング形式:hex、base64、bytes、preview Since v8.5.2
compress圧縮なし圧縮方式:gzip
rownumfalse行番号を含めるかどうか:true、false

format=jsonで使用できるパラメーター

  • これらのオプションはformat=jsonの場合だけに使用でき、1リクエストにつき1つだけ指定できます。
パラメーター既定値説明
transposefalse結果を行配列ではなく列配列で返します。
rowsFlattenfalseJSONオブジェクトのrowsフィールドの配列次元を1つ減らします。
rowsArrayfalse各レコードをオブジェクトとする配列だけのJSONを返します。

format=csvで使用できるパラメーター

パラメーター既定値説明
headerskipを指定するとヘッダーを含めません。
precision-1浮動小数点数の桁数:-1は丸めなし、0は整数表示

時刻形式のオプション

出力

レスポンスボディの全長が事前に分からない場合、Transfer-Encoding: chunkedを設定し、Content-Lengthは省略します。応答の終了はHTTPのチャンク転送フレーミングで判定します。本文の改行では判定せず、HTTPクライアントに処理を任せてください。

  • Transfer-Encoding: chunked: データを複数のチャンクに分けて送信し、ストリーミングに適しています。
  • Content-Lengthヘッダーなし:レスポンスボディの全長が事前に分からないことを示します。

JSON

/db/query APIの既定の出力形式はJSONです。 クエリパラメーターformat=jsonを指定するか、省略して既定値を使用します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 2
```

応答はContent-Type: application/jsonで返されます。

名前説明
successboolクエリの実行成功時にtrue
reasonstring実行結果のメッセージ。successfalseの場合はエラーメッセージを含みます。
elapsestringクエリ実行に要した時間
data実行成功時だけに存在
data.columns文字列の配列結果の列情報を表します。
data.types文字列の配列各列のデータ型を表します。
data.rowsレコードの配列結果レコードの配列です。
transpose=trueの場合、このフィールドはcolsに置き換わります。
data.cols系列の配列結果の列ごとの系列配列です。
transpose=trueの場合だけに存在します。
```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 3
```
{
  "data": {
    "columns": [ "NAME", "TIME", "VALUE" ],
    "types": [ "string", "datetime", "double" ],
    "rows": [
      [ "wave.sin", 1705381958775759000, 0.8563571936170834 ],
      [ "wave.sin", 1705381958785759000, 0.9011510331449053 ],
      [ "wave.sin", 1705381958795759000, 0.9379488170706388 ]
    ]
  },
  "success": true,
  "reason": "success",
  "elapse": "1.887042ms"
}

NDJSON

リクエストに、format=ndjsonクエリパラメーターを指定します。 Since v8.0.33

NDJSON(Newline Delimited JSON)は、各行が有効なJSONオブジェクトとなるストリーミング形式です。1つずつ処理できるため、大規模なデータやストリーミングデータに適しています。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 2
    &format=ndjson
```

応答のContent-Typeは、application/x-ndjsonです。

{"NAME":"wave.sin","TIME":1705381958775759000,"VALUE":0.8563571936170834}
{"NAME":"wave.sin","TIME":1705381958785759000,"VALUE":0.9011510331449053}

CSV

リクエストに、format=csvクエリパラメーターを指定します。

CSV形式も1行ずつ処理できるため、大規模なデータやストリーミングデータに適しています。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 2
    &format=csv
```

応答のContent-Typeは、text/csv; charset=utf-8です。

NAME,TIME,VALUE
wave.sin,1705381958775759000,0.8563571936170834
wave.sin,1705381958785759000,0.9011510331449053

BOX

リクエストに、format=boxクエリパラメーターを指定します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 2
    &format=box
    &timeformat=default
    &tz=Asia/Seoul
```

結果はASCIIの罫線付きのプレーンテキストで、応答のContent-Typetext/plainです。

+---------+-------------------------+--------------------+
| NAME    | TIME(ASIA/SEOUL)        | VALUE              |
+---------+-------------------------+--------------------+
| work-10 | 2024-01-16 14:12:38.775 | 0.8563571936170834 |
| work-10 | 2024-01-16 14:12:38.785 | 0.9011510331449053 |
+---------+-------------------------+--------------------+

CSV形式の応答

リクエストに、format=csvクエリパラメーターを指定します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 2
    &format=csv
```

応答のContent-Typeは、text/csvです。

NAME,TIME,VALUE
wave.sin,1705381958775759000,0.8563571936170834
wave.sin,1705381958785759000,0.9011510331449053

POST JSON

以下の例のように、JSON形式でクエリを要求することもできます。

リクエストのJSONメッセージ

```http
POST http://127.0.0.1:5654/db/query
Content-Type: application/json

{
  "q": "select * from EXAMPLE limit ?",
  "p": [2]
}
```

POST Form

HTMLフォームデータ形式も使用できます。この場合、HTTPヘッダーContent-Typeapplication/x-www-form-urlencodedに設定します。

```http
POST http://127.0.0.1:5654/db/query
Content-Type: application/x-www-form-urlencoded

q=select * from EXAMPLE limit 2
```

使用例

APIの詳細は、以下を参照してください。

このチュートリアルでは、以下のデータを事前に作成してください。

テーブルの作成

```http
POST http://127.0.0.1:5654/db/query
Content-Type: application/json

{
  "q":"create tag table if not exists EXAMPLE (name varchar(40) primary key, time datetime basetime, value double)"
}
```

データの挿入

```http
POST http://127.0.0.1:5654/db/write/EXAMPLE?timeformat=ns
Content-Type: application/json

{
    "data":{
      "columns":["NAME","TIME","VALUE"],
      "rows":[
          ["wave.sin",1676432361,0],
          ["wave.sin",1676432362,0.406736],
          ["wave.sin",1676432363,0.743144],
          ["wave.sin",1676432364,0.951056],
          ["wave.sin",1676432365,0.994522]
      ]
    }
}
```

CSV形式での検索

リクエスト

CSV形式には、format=csvクエリパラメーターを指定します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 5
    &format=csv
```

レスポンス

NAME,TIME,VALUE
wave.sin,1676432361000000000,0.111111
wave.sin,1676432362111111111,0.222222
wave.sin,1676432363222222222,0.333333
wave.sin,1676432364333333333,0.444444
wave.sin,1676432365444444444,0.555555

BOX形式での検索

リクエスト

BOX形式には、format=boxクエリパラメーターを指定します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 5
    &format=box
```

レスポンス

+----------+---------------------+----------+
| NAME     | TIME                | VALUE    |
+----------+---------------------+----------+
| wave.sin | 1676432361000000000 | 0        |
| wave.sin | 1676432362111111111 | 0.406736 |
| wave.sin | 1676432363222222222 | 0.743144 |
| wave.sin | 1676432364333333333 | 0.951056 |
| wave.sin | 1676432365444444444 | 0.994522 |
+----------+---------------------+----------+

行番号付きのBOX形式での検索

リクエスト

BOX形式には、format=boxクエリパラメーターを指定します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 5
    &format=box
    &rownum=true
```

レスポンス

+--------+----------+---------------------+----------+
| ROWNUM | NAME     | TIME                | VALUE    |
+--------+----------+---------------------+----------+
|      1 | wave.sin | 1676432361000000000 | 0.111111 |
|      2 | wave.sin | 1676432362111111111 | 0.222222 |
|      3 | wave.sin | 1676432363222222222 | 0.333333 |
|      4 | wave.sin | 1676432364333333333 | 0.444444 |
|      5 | wave.sin | 1676432365444444444 | 0.555555 |
+--------+----------+---------------------+----------+

ヘッダーなしのBOX形式での検索

リクエスト

ヘッダーなしのBOX形式には、format=boxheader=skipクエリパラメーターを指定します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 5
    &format=box
    &header=skip
```

レスポンス

+----------+---------------------+----------+
| wave.sin | 1676432361000000000 | 0        |
| wave.sin | 1676432362111111111 | 0.406736 |
| wave.sin | 1676432363222222222 | 0.743144 |
| wave.sin | 1676432364333333333 | 0.951056 |
| wave.sin | 1676432365444444444 | 0.994522 |
+----------+---------------------+----------+

整数値のBOX形式での検索

リクエスト

整数精度のBOX形式には、format=boxprecision=0クエリパラメーターを指定します。

```http
GET http://127.0.0.1:5654/db/query
    ?q=select * from EXAMPLE limit 5
    &format=box
    &precision=0
```

レスポンス

+----------+---------------------+-------+
| NAME     | TIME                | VALUE |
+----------+---------------------+-------+
| wave.sin | 1676432361000000000 | 0     |
| wave.sin | 1676432362111111111 | 0     |
| wave.sin | 1676432363222222322 | 0     |
| wave.sin | 1676432364333333233 | 0     |
| wave.sin | 1676432365444444444 | 1     |
+----------+---------------------+-------+
最終更新日