110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| ---
 | ||
| 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 类型。
 | ||
| - 子表名生成规则
 | ||
|   - 默认产生的子表名是根据规则生成的唯一 ID 值。
 | ||
|   - 用户也可以通过在client端的 taos.cfg 里配置 smlAutoChildTableNameDelimiter 参数来指定连接标签之间的分隔符,连接起来后作为子表名。举例如下:配置 smlAutoChildTableNameDelimiter=-, 插入数据为 st,t0=cpu1,t1=4 c1=3 1626006833639000000 则创建的子表名为 cpu1-4。
 | ||
|   - 用户也可以通过在client端的 taos.cfg 里配置 smlChildTableName 参数来指定某个标签值作为子表名。该标签值应该具有全局唯一性。举例如下:假设有个标签名为tname, 配置 smlChildTableName=tname, 插入数据为 st,tname=cpu1,t1=4 c1=3 1626006833639000000 则创建的子表名为 cpu1。注意如果多行数据 tname 相同,但是后面的 tag_set 不同,则使用第一行自动建表时指定的 tag_set,其他的行会忽略)。[TDengine 无模式写入参考指南](/reference/schemaless/#无模式写入行协议)
 | ||
| 
 | ||
| :::
 | ||
| 
 | ||
| ## 示例代码
 | ||
| 
 | ||
| <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
 | ||
| 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:
 | ||
| 
 | ||
| ```sql
 | ||
| SELECT * FROM `meters_current` WHERE location = "California.LosAngeles" AND groupid = 3;
 | ||
| ```
 |