50-opentsdb-json.mdx 3.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
---
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
[
G
gccgdb1234 已提交
22 23 24 25 26 27 28
  {
    "metric": "sys.cpu.nice",
    "timestamp": 1346846400,
    "value": 18,
    "tags": {
      "host": "web01",
      "dc": "lga"
29
    }
G
gccgdb1234 已提交
30 31 32 33 34 35 36 37 38 39
  },
  {
    "metric": "sys.cpu.nice",
    "timestamp": 1346846400,
    "value": 9,
    "tags": {
      "host": "web02",
      "dc": "lga"
    }
  }
40 41 42 43 44
]
```

与 OpenTSDB 行协议类似, metric 将作为超级表名, timestamp 表示时间戳,value 表示度量值, tags 表示标签集。

G
gccgdb1234 已提交
45
参考[OpenTSDB HTTP API 文档](http://opentsdb.net/docs/build/html/api_http/put.html)。
46 47

:::note
G
gccgdb1234 已提交
48

49
- 对于 JSON 格式协议,TDengine 并不会自动把所有标签转成 NCHAR 类型, 字符串将将转为 NCHAR 类型, 数值将同样转换为 DOUBLE 类型。
50
- TDengine 只接收 JSON **数组格式**的字符串,即使一行数据也需要转换成数组形式。
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
51
- 默认生成的子表名是根据规则生成的唯一 ID 值。用户也可以通过在 taos.cfg 里配置 smlChildTableName 参数来指定某个标签值作为子表名。该标签值应该具有全局唯一性。举例如下:假设有个标签名为tname, 配置 smlChildTableName=tname, 插入数据为 `"tags": { "host": "web02","dc": "lga","tname":"cpu1"}` 则创建的子表名为 cpu1。注意如果多行数据 tname 相同,但是后面的 tag_set 不同,则使用第一行自动建表时指定的 tag_set,其他的行会忽略)。
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
52
:::
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

## 示例代码

<Tabs defaultValue="java" groupId="lang">
  <TabItem label="Java" value="java">
    <JavaJson />
  </TabItem>
  <TabItem label="Python" value="Python">
    <PyJson />
  </TabItem>
  <TabItem label="Go" value="go">
    <GoJson />
  </TabItem>
  <TabItem label="Node.js" value="nodejs">
    <NodeJson />
  </TabItem>
  <TabItem label="C#" value="csharp">
    <CsJson />
  </TabItem>
  <TabItem label="C" value="c">
    <CJson />
  </TabItem>
</Tabs>

以上示例代码会自动创建 2 个超级表, 每个超级表有 2 条数据。

```cmd
80
taos> USE test;
81 82
Database changed.

83
taos> SHOW STABLES;
84 85 86 87
              name              |
=================================
 meters.current                 |
 meters.voltage                 |
88 89
Query OK, 2 row(s) in set (0.001954s)

90
taos> SELECT * FROM `meters.current`;
wmmhello's avatar
wmmhello 已提交
91
           _ts            |           _value           |          groupid          |            location            |
92
===================================================================================================================
G
gccgdb1234 已提交
93 94
 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               |
95 96
Query OK, 2 row(s) in set (0.004076s)
```
wmmhello's avatar
wmmhello 已提交
97

98 99 100 101 102 103 104 105
## SQL 查询示例

`meters.voltage` 是插入数据的超级表名。

可以通过超级表的 TAG 来过滤数据,比如查询 `location=California.LosAngeles groupid=1` 可以通过如下 SQL:

```sql
SELECT * FROM `meters.current` WHERE location = "California.LosAngeles" AND groupid = 3;
wmmhello's avatar
wmmhello 已提交
106
```