tencent cloud

时序数据库 CTSDB

动态与公告
产品动态
公告
产品简介
产品概述
系统架构
应用场景
关键概念
实例类型与规格
购买指南
产品定价
购买实例
续费说明
欠费说明
退费说明
快速入门
连接并写入数据
操作指南
访问管理
管理实例
自动备份
系统监控
库管理
账号管理
管理安全组
外网访问
InfluxQL 兼容性
数据库管理
Schema 查询
数据类型
数据查询
InfluxQL 函数
客户端
SDK 参考
influx CLI 客户端
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Database APIs
Data Types
Error Codes
实践教程
数据表定义推荐
接入 Grafana 服务
接入 Telegraf 服务
性能白皮书
测试环境
测试工具
写入性能测试
查询性能测试
常见问题
词汇表
CTSDB 政策
隐私政策
数据处理和安全协议
联系我们

连接并写入数据

PDF
聚焦模式
字号
最后更新时间: 2025-04-30 16:18:49
本章节以 Linux 操作系统为例,协助您通过云服务器 CVM 内网,使用 HTTP 方式连接时序数据库 CTSDB 3.0 版实例。

前提条件

申请与时序数据库 CTSDB 3.0 版在同一地域同一个 VPC 内的 Linux 云服务器 CVM
购买实例,且状态为运行中。
获取实例的内网 IP 地址与网络端口。具体操作,请参见 查看实例
获取实例的访问账号及密码信息。具体操作,请参见 账号管理

操作步骤

步骤1:准备数据

如下为一些关于车辆的时序数据,每行代表一个车辆的信息,包括车辆的 id、所在城市、类型、速度和温度等。时间戳位于每行末尾,表示这些信息是在对应的时间戳时刻记录的。现将这些数据写入已创建的数据库实例中。
car,id=0,city=city_0,type=type_0 speed=100,temp=20 1675236656000000000
car,id=1,city=city_1,type=type_1 speed=101,temp=21 1675236656000000000
car,id=2,city=city_0,type=type_2 speed=102,temp=22 1675236656000000000
car,id=3,city=city_1,type=type_0 speed=103,temp=23 1675236656000000000
car,id=4,city=city_0,type=type_1 speed=104,temp=24 1675236656000000000
car,id=5,city=city_1,type=type_2 speed=105,temp=25 1675236656000000000
car,id=0,city=city_0,type=type_0 speed=106,temp=26 1675236657000000000
car,id=1,city=city_1,type=type_1 speed=107,temp=27 1675236657000000000
car,id=2,city=city_0,type=type_2 speed=108,temp=28 1675236657000000000
car,id=3,city=city_1,type=type_0 speed=100,temp=29 1675236657000000000
car,id=4,city=city_0,type=type_1 speed=101,temp=30 1675236657000000000
car,id=5,city=city_1,type=type_2 speed=102,temp=20 1675236657000000000
car,id=0,city=city_0,type=type_0 speed=103,temp=21 1675236658000000000
car,id=1,city=city_1,type=type_1 speed=104,temp=22 1675236658000000000
car,id=2,city=city_0,type=type_2 speed=105,temp=23 1675236658000000000
car,id=3,city=city_1,type=type_0 speed=106,temp=24 1675236658000000000
car,id=4,city=city_0,type=type_1 speed=107,temp=25 1675236658000000000
car,id=5,city=city_1,type=type_2 speed=108,temp=26 1675236658000000000
car,id=0,city=city_0,type=type_0 speed=100,temp=27 1675236659000000000
car,id=1,city=city_1,type=type_1 speed=101,temp=28 1675236659000000000
car,id=2,city=city_0,type=type_2 speed=102,temp=29 1675236659000000000
car,id=3,city=city_1,type=type_0 speed=103,temp=30 1675236659000000000
car,id=4,city=city_0,type=type_1 speed=104,temp=20 1675236659000000000
car,id=5,city=city_1,type=type_2 speed=105,temp=21 1675236659000000000
car,id=0,city=city_0,type=type_0 speed=106,temp=22 1675236660000000000
car,id=1,city=city_1,type=type_1 speed=107,temp=23 1675236660000000000
car,id=2,city=city_0,type=type_2 speed=108,temp=24 1675236660000000000
car,id=3,city=city_1,type=type_0 speed=100,temp=25 1675236660000000000
car,id=4,city=city_0,type=type_1 speed=101,temp=26 1675236660000000000
car,id=5,city=city_1,type=type_2 speed=102,temp=27 1675236660000000000
car,id=0,city=city_0,type=type_0 speed=103,temp=28 1675236661000000000
car,id=1,city=city_1,type=type_1 speed=104,temp=29 1675236661000000000
car,id=2,city=city_0,type=type_2 speed=105,temp=30 1675236661000000000
car,id=3,city=city_1,type=type_0 speed=106,temp=20 1675236661000000000
car,id=4,city=city_0,type=type_1 speed=107,temp=21 1675236661000000000
car,id=5,city=city_1,type=type_2 speed=108,temp=22 1675236661000000000

步骤2:登录云服务器 CVM

2. 在左侧导航栏,选择实例
3. 在实例管理页面上方,选择地域。
4. 在实例列表中找到已申请的 CVM ,单击右侧操作列中的登录
5. 输入申请 CVM 时设置的用户名密码即可登录云服务器。

步骤3:创建数据库

CREATE DATABASE 的语法格式如下所示:
CREATE DATABASE <database_name> [WITH [DURATION <duration[默认无限制]>]]
database_name:指数据库库名。
DURATION:数据过期删除时间(TTL , Time To Live),单位:天,取值为非零整数,选填参数。如果不启用数据过期,不配置该参数,如需启用数据过期,该数据库中的数据达到过期时间后将被自动删除清理。例如 DURATION 180d,表示该数据库中的数据达到180天即过期自动删除。
创建数据库 time_series_test_db,执行格式如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode "pretty=true" \\
--data-urlencode 'q=CREATE DATABASE time_series_test_db'
${influxdb_ip}:指数据库实例的内网 IP 地址。其端口默认为8086,请以实际情况进行替换。
user:指访问实例的账号与密码信息,默认账号以实例 ID 命名。您可以在 控制台账号管理页面查看账号信息。具体操作,请参见 账号管理
data-urlencode "pretty=true" :pretty 为 true,将以 JSON Pretty Print 格式返回信息。
data-urlencode:即 CREATE DATABASE 的语法格式 ,如'q=CREATE DATABASE time_series_test_db'、'q=CREATE DATABASE time_series_test_db WITH DURATION 180d'。
返回如下信息,说明在创建中。
{
"code": "invalid",
"message": "Tsdb create database operation is executing, please try again later(maybe failture)."
}
返回如下信息,说明创建成功。
{
"results": [
{
"statement_id": 0
}
]
}
执行show database,查看已经创建的数据库,执行格式如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode "pretty=true" \\
--data-urlencode 'q=show databases'
执行示例,如下所示:
[root@VM-16-41-centos ~]# curl --get http://10.16.12.8:8086/query \\
> --user "ctsdbi-8ym3****":"test@123" \\
> --data-urlencode "pretty=true" \\
> --data-urlencode 'q=show databases'
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "databases",
"columns": [
"name"
],
"columns_types": [
"string"
],
"values": [
[
"test0407"
],
[
"time_series_test_db"
],
[
"_internal"
],
[
"TestAlvinDatabase"
],
[
"time_series_test_db0"
]
]
}
]
}
]
}

步骤4:写入数据

给数据库 time_series_test_db 写入数据。
curl -v --data-binary @/tmp/line_protocol_sample.txt \\
--user "time_series_test_account":"test_password" \\
-H "Content-Type: text/plain" \\
-H "Accept: application/json" -X POST \\
"http://${influxdb_ip}:8086/write?db=time_series_test_db&precision=ns"
@/tmp/line_protocol_sample.txt:指写入数据的文件的相对路径。
user:配置实例的访问账号与密码。
influxdb_ip:指实例内网 IP 地址。
db:指数据库库名。
precision:时间数据的精度,可以使用的精度包括 ns(纳秒)、u(微秒)、ms(毫秒)、s(秒)、m(分钟)、h(小时)。
执行示例如下,将/tmp/test.txt文档中的时序数据写入数据库time_series_test_db
[root@VM-16-41-centos tmp]# curl -v --data-binary @/tmp/test.txt \\
> --user "ctsdbi-8ym3****":"test@123" \\
> -H "Content-Type: text/plain" \\
> -H "Accept: application/json" -X POST \\
> "http://10.16.12.8:8086/write?db=time_series_test_db&precision=ns"
* About to connect() to 10.16.12.8 port 8086 (#0)
* Trying 10.16.12.8...
* Connected to 10.16.12.8 (10.16.12.8) port 8086 (#0)
* Server auth using Basic with user 'ctsdbi-8ym3****'
> POST /write?db=time_series_test_db&precision=ns HTTP/1.1
> Authorization: Basic Y3RzZGJpLTh5********************
> User-Agent: curl/7.29.0
> Host: 10.16.12.8:8086
> Content-Type: text/plain
> Accept: application/json
> Content-Length: 2552
> Expect: 100-continue
>
* Done waiting for 100-continue
< HTTP/1.1 204 No Content
< Date: Mon, 10 Apr 2023 03:48:51 GMT
< Content-Type: application/json
< Content-Length: 0
<
* Connection #0 to host 10.16.12.8 left intact
写入数据返回信息中,Date: Mon, 10 Apr 2023 03:48:51 GMT显示写入完成的时间点,无任何错误提示信息,说明写入成功。常见的错误信息,请参见下表。
错误信息
错误含义
处理方式
{     "error": "NotFoundCollection cannot find collections" }
连接失败
排查连接数据库的内网 IP 地址与端口是否正确。
{     "error": "BadParam ERR wrong password.\\r\\n" }
访问数据库的账户密码错误
请检查密码信息是否正确。
{     "error": "NotFoundAccount ERR account id or name not exists: 1nB3pmg==" }
访问数据的账户不存在
请检查账户信息是否输入错误。
{     "error": "InvalidFieldFormat ParsePoint() failed|status=InvalidFieldFormat InvalidBooleanFormat not start with tTfF|line=727|col=14\\ncar id=0,city=city_0,type=type_0 speed=100,temp=20 0\\n              | start here" }
数据写入失败
请检查car id=0,city=city_0,type=type_0 speed=100,temp=20这一行数据的第14个字符是否存在 Line Protocol 格式问题。
使用 show measurements 查看写入的 measurements,执行方式如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode 'db=time_series_test_db' \\
--data-urlencode "pretty=true" \\
--data-urlencode "q=show measurements"
执行示例,如下所示:
[root@VM-16-41-centos ~]# curl --get http://10.16.12.8:8086/query \\
> --user "ctsdbi-8ym3****":"test@123" \\
> --data-urlencode 'db=time_series_test_db' \\
> --data-urlencode "pretty=true" \\
> --data-urlencode "q=show measurements"
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "measurements",
"columns": [
"name"
],
"columns_types": [
"string"
],
"values": [
[
"car"
],
[
"d=0"
]
]
}
]
}
]
}

步骤5:查询数据

Select 语法格式如下所示:
select_stmt = "SELECT" fields from_clause [ where_clause ] [ group_by_clause ] [ order_by_clause ] [ limit_clause ] [ offset_clause ] [ slimit_clause ] [ soffset_clause ] [ sql_order_by_clause ]
参数含义,请参见下表。
参数
参数含义
fields
指定需要查询的字段列表,可以是一个或多个字段,用逗号分隔。如果需要查询所有字段,可以使用通配符“*”。
from_clause
指定需要查询的 measurement 名称。
where_clause
指定查询的条件,可以是一个或多个条件,可以使用 AND、OR、NOT 等逻辑运算符组合多个条件。条件包括 tag 和 field,可以使用比较运算符(如=、!=、>、<等)进行比较。
group_by_clause
指定查询结果需要按照哪个 tag 进行分组,可以是一个或多个 tag,用逗号分隔。
order_by_clause
指定查询结果需要按照哪个字段进行排序,可以是一个或多个字段,用逗号分隔。默认情况下,查询结果按照时间戳排序。
limit_clause
指定查询结果的最大行数。
offset_clause
指定查询结果的起始行数。
slimit_clause
类似于 limit_clause,但仅应用于每个分组内部的结果集。
soffset_clause
类似于 offset_clause,但仅应用于每个分组内部的结果集。
sql_order_by_clause
类似于 order_by_clause,但是使用 SQL 语法进行排序。
查询全部数据执行方式,如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode 'db=time_series_test_db' \\
--data-urlencode "pretty=true" \\
--data-urlencode 'q=select * from car'
分页查询执行方式,如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode 'db=time_series_test_db' \\
--data-urlencode "pretty=true" \\
--data-urlencode 'q=select * from car limit 3 offset 2'
聚合函数查询执行方式,如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode 'db=time_series_test_db' \\
--data-urlencode "pretty=true" \\
--data-urlencode 'q=select max(speed) as fun1, min(speed) as fun2 from car group by time(3s), type fill(none)'
聚合函数执行返回结果,如下所示:
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "car",
"tags": {
"type": "type_0"
},
"columns": [
"time",
"fun1",
"fun2"
],
"columns_types": [
"time",
"float",
"float"
],
"values": [
[
"2023-02-01T07:30:54Z",
103.0,
100.0
],
[
"2023-02-01T07:30:57Z",
106.0,
100.0
],
[
"2023-02-01T07:31:00Z",
106.0,
100.0
]
]
},
{
"name": "car",
"tags": {
"type": "type_1"
},
"columns": [
"time",
"fun1",
"fun2"
],
"columns_types": [
"time",
"float",
"float"
],
"values": [
[
"2023-02-01T07:30:54Z",
104.0,
101.0
],
[
"2023-02-01T07:30:57Z",
107.0,
101.0
],
[
"2023-02-01T07:31:00Z",
107.0,
101.0
]
]
},
{
"name": "car",
"tags": {
"type": "type_2"
},
"columns": [
"time",
"fun1",
"fun2"
],
"columns_types": [
"time",
"float",
"float"
],
"values": [
[
"2023-02-01T07:30:54Z",
105.0,
102.0
],
[
"2023-02-01T07:30:57Z",
108.0,
102.0
],
[
"2023-02-01T07:31:00Z",
108.0,
102.0
]
]
}
]
}
]
}

步骤6:删除数据库

DELETE
删除具体的数据,语法格式如下所示:
DELETE FROM <measurement_name> WHERE [<tag_key>='<tag_value>'] | [<time interval>]
measurement_name:指定需要删除数据的 measurement 名称。
tag_key、tag_value:可选参数,指定需要删除的数据点对应的 tag 键值对。如果指定了 tag_key 和 tag_value,则只会删除符合条件的数据点。如果不指定 tag_key 和 tag_value,则会删除所有 measurement_name 中的数据点。
time interval:可选参数,指定需要删除的时间范围。可以使用以下格式进行指定:
时间戳:删除指定时间戳的数据点,例如:"time >= 1434059627 and time <= 1434060027"
相对时间:删除相对于当前时间一定时间范围内的数据点,例如:"time >= now() - 1h"
时间段:删除指定时间段内的数据点,例如:"time >= '2018-01-01T00:00:00Z' and time <= '2018-01-02T00:00:00Z'"
执行方式,如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode 'db=time_series_test_db' \\
--data-urlencode "pretty=true" \\
--data-urlencode "q=delete from car where city = 'city_0'"
DROP MEASUREMENT
删除 measurement 语法格式,如下所示:
DROP MEASUREMENT <measurement_name>
执行方式如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode 'db=time_series_test_db' \\
--data-urlencode "pretty=true" \\
--data-urlencode 'q=drop measurement car'
DROP DATABASE 
删除数据库,语法格式如下所示:
DROP DATABASE <database_name>
执行方式,如下所示:
curl --get http://${influxdb_ip}:8086/query \\
--user "time_series_test_account":"test_password" \\
--data-urlencode "pretty=true" \\
--data-urlencode 'q=DROP DATABASE time_series_test_db'
返回如下信息,说明删除成功。
{
"results": [
{
"statement_id": 0
}
]
}

更多参考

时序数据库 CTSDB 3.0 版与原生的 InfluxDB 使用相同。具体如何管理数据库,请参见 InfluxDB®️官方文档
时序数据库CTSDB 3.0 版使用了 InfluxDB 原生 SDK。多语言 SDK 的示例,请参见 InfluxDB®️客户端文档

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈