--- sidebar_label: OpenTSDB JSON 格式协议 title: OpenTSDB JSON 格式协议 --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; import JavaJson from "./_java_opts_json.mdx"; import PyJson from "./_py_opts_json.mdx"; import GoJson from "./_go_opts_json.mdx"; import RustJson from "./_rust_opts_json.mdx"; import NodeJson from "./_js_opts_json.mdx"; import CsJson from "./_cs_opts_json.mdx"; import CJson from "./_c_opts_json.mdx"; ## 协议介绍 OpenTSDB JSON 格式协议采用一个 JSON 字符串表示一行或多行数据。例如: ```json [ { "metric": "sys.cpu.nice", "timestamp": 1346846400, "value": 18, "tags": { "host": "web01", "dc": "lga" } }, { "metric": "sys.cpu.nice", "timestamp": 1346846400, "value": 9, "tags": { "host": "web02", "dc": "lga" } } ] ``` 与 OpenTSDB 行协议类似, metric 将作为超级表名, timestamp 表示时间戳,value 表示度量值, tags 表示标签集。 参考[OpenTSDB HTTP API 文档](http://opentsdb.net/docs/build/html/api_http/put.html)。 :::note - 对于 JSON 格式协议,TDengine 并不会自动把所有标签转成 nchar 类型, 字符串将将转为 nchar 类型, 数值将同样转换为 double 类型。 - TDengine 只接收 JSON **数组格式**的字符串,即使一行数据也需要转换成数组形式。 - 默认生产的子表名是根据规则生成的唯一ID值。为了让用户可以指定生成的表名,可以通过在taos.cfg里配置 smlChildTableName 参数来指定。 举例如下:配置 smlChildTableName=tname 插入数据为 "tags": { "host": "web02","dc": "lga","tname":"cpu1"} 则创建的表名为 cpu1,注意如果多行数据 tname 相同,但是后面的 tag_set 不同,则使用第一行自动建表时指定的 tag_set,其他的行会忽略)。 ::: ## 示例代码 以上示例代码会自动创建 2 个超级表, 每个超级表有 2 条数据。 ```cmd taos> use test; Database changed. taos> show stables; name | ================================= meters.current | meters.voltage | Query OK, 2 row(s) in set (0.001954s) taos> select * from `meters.current`; _ts | _value | groupid | location | =================================================================================================================== 2022-03-28 09:56:51.249 | 10.300000000 | 2.000000000 | California.SanFrancisco | 2022-03-28 09:56:51.250 | 12.600000000 | 2.000000000 | California.SanFrancisco | Query OK, 2 row(s) in set (0.004076s) ``` ## SQL查询示例 - `meters.voltage` 是插入数据的超级表名 - 可以通过超级表的tag来过滤数据,比如查询 `location=California.LosAngeles groupid=1` 可以通过如下sql: ``` cmd select * from `meters.voltage` where location="California.LosAngeles" and groupid=1 ```