--- title: OpenTSDB JSON Protocol sidebar_label: OpenTSDB JSON Protocol description: This document describes how to insert data into TDengine using the OpenTSDB JSON protocol. --- 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"; ## Introduction A JSON string is used in OpenTSDB JSON to represent one or more rows of data, for example: For example: ```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" } } ] ``` Similar to OpenTSDB line protocol, `metric` will be used as the STable name, `timestamp` is the timestamp to be used, `value` represents the metric collected, `tags` are the tag sets. Please refer to [OpenTSDB HTTP API](http://opentsdb.net/docs/build/html/api_http/put.html) for more details. :::note - In JSON protocol, strings will be converted to NCHAR type and numeric values will be converted to double type. - The child table name is created automatically in a rule to guarantee its uniqueness. But you can configure `smlChildTableName` in taos.cfg to specify a tag value as the table names if the tag value is unique globally. For example, if a tag is called `tname` and you set `smlChildTableName=tname` in taos.cfg, when you insert `st,tname=cpu1,t1=4 c1=3 1626006833639000000`, the child table `cpu1` will be automatically created. Note that if multiple rows have the same tname but different tag_set values, the tag_set of the first row is used to create the table and the others are ignored. - Due to the fact that SQL table names do not support point(.), schemaless has also processed point(.) and automatically replaced them with underscores(_) ::: ## Examples 2 STables will be created automatically and each STable has 2 rows of data in the above sample code. ```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) ``` ## Query Examples If you want query the data of "tags": {"location": "California.LosAngeles", "groupid": 1}, here is the query SQL: ```sql SELECT * FROM `meters_current` WHERE location = "California.LosAngeles" AND groupid = 3; ```