跳到主要内容
版本:0.11

HTTP API

GreptimeDB 提供了 HTTP API 用于与数据库进行交互。如需查看完整的 API 端点列表,请查看 HTTP Endpoints。

Base URL​

API Base URL 是 http(s)://<host>:<port>/。

  • 对于在本地机器上运行的 GreptimeDB 实例,Base URL 是 http://localhost:4000/,默认端口配置为 4000。你可以在配置文件中更改服务的 host 和 port。
  • 对于 GreptimeCloud,Base URL 是 https://<host>/。你可以在 GreptimeCloud 控制台的 "Connection Information" 中找到 host。

在以下内容中,我们使用 http://{{API-host}}/ 作为 Base URL 来演示 API。

通用 Headers​

鉴权​

GreptimeDB 支持 HTTP API 中内置的 Basic 鉴权机制。要设置鉴权,请按照以下步骤操作:

  1. 使用 <username:password> 格式和 Base64 算法对用户名和密码进行编码。
  2. 使用 Authorization : Basic <base64-encoded-credentials> 格式将编码后的凭据附加到 HTTP 请求头中。

以下是一个示例。如果要使用用户名 greptime_user 和密码 greptime_pwd 连接到 GreptimeDB,请使用以下命令:

curl -X POST \
-H 'Authorization: Basic Z3JlcHRpbWVfdXNlcjpncmVwdGltZV9wd2Q=' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'sql=show tables' \
http://localhost:4000/v1/sql

在此示例中,Z3JlcHRpbWVfdXNlcjpncmVwdGltZV9wd2Q= 表示 greptime_user:greptime_pwd 的 Base64 编码值。请确保用自己配置的用户名和密码替换它,并使用 Base64 进行编码。

注意

InfluxDB 使用自己的鉴权格式,请参阅 InfluxDB 获取详细信息。

时区​

GreptimeDB 支持 HTTP 请求中的 X-Greptime-Timezone 头部。 它用于为当前 SQL 查询指定时区。

例如,以下请求使用时区 +1:00 进行查询:

curl -X POST \
-H 'X-Greptime-Timezone: +1:00' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'sql=SHOW VARIABLES time_zone;' \
http://localhost:4000/v1/sql

结果为:

{
"output": [
{
"records": {
"schema": {
"column_schemas": [
{
"name": "TIME_ZONE",
"data_type": "String"
}
]
},
"rows": [
[
"+01:00"
]
]
}
}
],
"execution_time_ms": 27
}

有关时区如何影响数据的写入和查询,请参考写入数据和查询数据部分中的 SQL 文档。

请求超时设置​

GreptimeDB 支持在 HTTP 请求中使用 X-Greptime-Timeout 请求头,用于指定数据库服务器中运行的请求超时时间。

例如,以下请求为查询设置了 120s 的超时时间:

curl -X POST \
-H 'X-Greptime-Timeout: 120s' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'sql=show tables' \
http://localhost:4000/v1/sql

Admin APIs​

注意

这些 API 在 GreptimeCloud 中无法使用。

检查数据库健康状态​

你可以使用 /health 端点检查 GreptimeDB 服务器的健康状况。 有关更多信息,请参阅检查数据库健康状态。

检查数据库状态​

你可以使用 /status 端点检查 GreptimeDB 服务器的状态。

curl http://{{API-host}}/status

例如:

curl http://localhost:4000/status

输出包含数据库版本和源代码信息,类似如下:

{
"source_time": "2024-11-08T06:34:49Z",
"commit": "0e0c4faf0d784f25fed8f26e7000f1f869c88587",
"branch": "main",
"rustc_version": "rustc 1.84.0-nightly (e92993dbb 2024-10-18)",
"hostname": "local",
"version": "0.9.5"
}

获取 GreptimeDB 服务器配置​

你可以使用 /config 端点获取 GreptimeDB 服务器的 TOML 配置。

curl http://{{API-host}}/config

例如:

curl http://localhost:4000/config

输出包含 GreptimeDB 服务器的配置信息。

mode = "standalone"
enable_telemetry = true
user_provider = "static_user_provider:file:user"
init_regions_in_background = false
init_regions_parallelism = 16

[http]
addr = "127.0.0.1:4000"
timeout = "30s"
body_limit = "64MiB"
is_strict_mode = false

# ...

POST SQL 语句​

要通过 HTTP API 向 GreptimeDB 服务器提交 SQL 语句,请使用以下格式:

curl -X POST \
-H 'Authorization: Basic {{authentication}}' \
-H 'X-Greptime-Timeout: {{time precision}}' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'sql={{SQL-statement}}' \
http://{{API-host}}/v1/sql

Headers​

Query string parameters​

  • db: 数据库名称。可选。如果未提供,将使用默认数据库 public。
  • format: 输出格式。可选。 除了默认的 JSON 格式外,HTTP API 还允许你通过提供 format 查询参数来自定义输出格式,值如下:
    • influxdb_v1: influxdb 查询 API 兼容格式。附加参数:
      • epoch: [ns,u,µ,ms,s,m,h],返回指定精度的时间戳
    • csv: 逗号分隔值输出
    • arrow: Arrow IPC 格式。附加参数:
      • compression: zstd 或 lz4,默认:无压缩
    • table: 控制台输出的 ASCII 表格格式

Body​

  • sql: SQL 语句。必填。

响应​

响应是一个 JSON 对象,包含以下字段:

  • output: SQL 执行结果,请参阅下面的示例以了解详细信息。
  • execution_time_ms: 语句的执行时间(毫秒)。

示例​

INSERT 语句​

例如,要向数据库 public 的 monitor 表中插入数据,请使用以下命令:

curl -X POST \
-H 'Authorization: Basic {{authorization if exists}}' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'sql=INSERT INTO monitor VALUES ("127.0.0.1", 1667446797450, 0.1, 0.4), ("127.0.0.2", 1667446798450, 0.2, 0.3), ("127.0.0.1", 1667446798450, 0.5, 0.2)' \
http://localhost:4000/v1/sql?db=public

Response 包含受影响的行数:

{"output":[{"affectedrows":3}],"execution_time_ms":11}

SELECT 语句​

你还可以使用 HTTP API 执行其他 SQL 语句。例如,从 monitor 表中查询数据:

curl -X POST \
-H 'Authorization: Basic {{authorization if exists}}' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d "sql=SELECT * FROM monitor" \
http://localhost:4000/v1/sql?db=public

Response 包含 JSON 格式的查询数据:

{
"output": [
{
"records": {
"schema": {
"column_schemas": [
{
"name": "host",
"data_type": "String"
},
{
"name": "ts",
"data_type": "TimestampMillisecond"
},
{
"name": "cpu",
"data_type": "Float64"
},
{
"name": "memory",
"data_type": "Float64"
}
]
},
"rows": [
[
"127.0.0.1",
1720728000000,
0.5,
0.1
]
],
"total_rows": 1
}
}
],
"execution_time_ms": 7
}

Response 包含以下字段:

  • output: 执行结果。
    • records: 查询结果。
      • schema: 结果的 schema,包括每列的 schema。
      • rows: 查询结果的行,每行是一个包含 schema 中对应列值的数组。
  • execution_time_ms: 语句的执行时间(毫秒)。

时区​

GreptimeDB 支持 HTTP 请求中的 X-Greptime-Timezone header。 它用于为当前 SQL 查询指定时区。

例如,以下请求使用时区 +1:00 进行查询:

curl -X POST \
-H 'X-Greptime-Timezone: +1:00' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'sql=SHOW VARIABLES time_zone;' \
http://localhost:4000/v1/sql

查询后的结果为:

{
"output": [
{
"records": {
"schema": {
"column_schemas": [
{
"name": "TIME_ZONE",
"data_type": "String"
}
]
},
"rows": [
[
"+01:00"
]
]
}
}
],
"execution_time_ms": 27
}

有关时区如何影响数据的写入和查询,请参考写入数据和查询数据部分中的 SQL 文档。

使用 table 格式输出查询数据​

你可以在查询字符串参数中使用 table 格式,以 ASCII 表格格式获取输出。

curl -X POST \
-H 'Authorization: Basic {{authorization if exists}}' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d "sql=SELECT * FROM monitor" \
http://localhost:4000/v1/sql?db=public&format=table

输出

┌─host────────┬─ts────────────┬─cpu─┬─memory─┐
│ "127.0.0.1" │ 1667446797450 │ 0.1 │ 0.4 │
│ "127.0.0.1" │ 1667446798450 │ 0.5 │ 0.2 │
│ "127.0.0.2" │ 1667446798450 │ 0.2 │ 0.3 │
└─────────────┴───────────────┴─────┴────────┘

使用 influxdb_v1 格式输出查询数据​

你可以在查询字符串参数中使用 influxdb_v1 格式,以 InfluxDB 查询 API 兼容格式获取输出。

curl -X POST \
-H 'Authorization: Basic {{authorization if exists}}' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d "sql=SELECT * FROM monitor" \
http://localhost:4000/v1/sql?db=public&format=influxdb_v1&epoch=ms
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "",
"columns": [
"host",
"cpu",
"memory",
"ts"
],
"values": [
[
["127.0.0.1", 0.1, 0.4, 1667446797450],
["127.0.0.1", 0.5, 0.2, 1667446798450],
["127.0.0.2", 0.2, 0.3, 1667446798450]
]
]
}
]
}
],
"execution_time_ms": 2
}

POST PromQL 查询​

API 返回 Prometheus 查询结果格式​

GreptimeDB 兼容 Prometheus 查询语言 (PromQL),可以用于查询 GreptimeDB 中的数据。 有关所有兼容的 API,请参阅 Prometheus 查询语言 文档。

API 返回 GreptimeDB JSON 格式​

GreptimeDB 同样暴露了一个自己的 HTTP API 用于 PromQL 查询,即在当前的 API 路径 /v1 的后方拼接 /promql。 该接口的返回值是 GreptimeDB 的 JSON 格式,而不是 Prometheus 的格式。 如下示例:

curl -X GET \
-H 'Authorization: Basic {{authorization if exists}}' \
-G \
--data-urlencode 'db=public' \
--data-urlencode 'query=avg(system_metrics{idc="idc_a"})' \
--data-urlencode 'start=1667446797' \
--data-urlencode 'end=1667446799' \
--data-urlencode 'step=1s' \
http://localhost:4000/v1/promql

接口中的参数和 Prometheus' HTTP API 的 range_query 接口相似:

  • db=<database>:在使用 GreptimeDB 进行鉴权操作时必填。
  • query=<string>:必填。Prometheus 表达式查询字符串。
  • start=<rfc3339 | unix_timestamp>:必填。开始时间戳,包含在内。它用于设置 TIME INDEX 列中的时间范围。
  • end=<rfc3339 | unix_timestamp>:必填。结束时间戳,包含在内。它用于设置 TIME INDEX 列中的时间范围。
  • step=<duration | float>:必填。查询步长,可以使用持续时间格式或秒数的浮点数。

以下是每种参数的类型的示例:

  • rfc3339
    • 2015-07-01T20:11:00Z (default to seconds resolution)
    • 2015-07-01T20:11:00.781Z (with milliseconds resolution)
    • 2015-07-02T04:11:00+08:00 (with timezone offset)
  • unix timestamp
    • 1435781460 (default to seconds resolution)
    • 1435781460.781 (with milliseconds resolution)
  • duration
    • 1h (1 hour)
    • 5d1m (5 days and 1 minute)
    • 2 (2 seconds)
    • 2s (also 2 seconds)

结果格式与 Post SQL 语句中描述的 /sql 接口相同。

{
"code": 0,
"output": [
{
"records": {
"schema": {
"column_schemas": [
{
"name": "ts",
"data_type": "TimestampMillisecond"
},
{
"name": "AVG(system_metrics.cpu_util)",
"data_type": "Float64"
},
{
"name": "AVG(system_metrics.memory_util)",
"data_type": "Float64"
},
{
"name": "AVG(system_metrics.disk_util)",
"data_type": "Float64"
}
]
},
"rows": [
[
1667446798000,
80.1,
70.3,
90
],
[
1667446799000,
80.1,
70.3,
90
]
]
}
}
],
"execution_time_ms": 5
}

Post Influxdb line protocol 数据​

curl -X POST \
-H 'Authorization: token <username>:<password>' \
-d '{{Influxdb-line-protocol-data}}' \
http://{{API-host}}/v1/influxdb/api/v2/write?precision={{time-precision}}

Headers​

  • Authorization: 与其他 API 不同,InfluxDB 行协议 API 使用 InfluxDB 鉴权格式。对于 V2 协议,Authorization 是 token <username>:<password>。

Query string parameters​

  • u: 用户名。可选。它是 V1 的鉴权用户名。
  • p: 密码。可选。它是 V1 的鉴权密码。
  • db: 数据库名称。可选。默认值是 public。
  • precision: 定义请求体中提供的时间戳的精度。请参考用户指南中的 InfluxDB 行协议文档。

Body​

InfluxDB 行协议数据点。请参考 InfluxDB 行协议 文档。

示例​

请参考用户指南中的 InfluxDB 行协议。

管理 Pipeline 的 API​

在将日志写入 GreptimeDB 时,你可以使用 HTTP API 来管理 Pipeline。 请参考 管理 Pipeline 文档。