--- title: OpenTSDB Line Protocol sidebar_label: OpenTSDB Line Protocol description: This document describes how to insert data into TDengine using the OpenTSDB Line Protocol. --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; import JavaTelnet from "./_java_opts_telnet.mdx"; import PyTelnet from "./_py_opts_telnet.mdx"; import GoTelnet from "./_go_opts_telnet.mdx"; import RustTelnet from "./_rust_opts_telnet.mdx"; import NodeTelnet from "./_js_opts_telnet.mdx"; import CsTelnet from "./_cs_opts_telnet.mdx"; import CTelnet from "./_c_opts_telnet.mdx"; ## Introduction A single line of text is used in OpenTSDB line protocol to represent one row of data. OpenTSDB employs a single column data model, so each line can only contain a single data column. There can be multiple tags. Each line contains 4 parts as below: ```txt =[ =] ``` - `metric` will be used as the STable name. - `timestamp` is the timestamp of current row of data. The time precision will be determined automatically based on the length of the timestamp. Second and millisecond time precision are supported. - `value` is a metric which must be a numeric value, The corresponding column name is "value". - The last part is the tag set separated by spaces, all tags will be converted to NCHAR type automatically. For example: ```txt meters.current 1648432611250 11.3 location=California.LosAngeles groupid=3 ``` - 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(_) Please refer to [OpenTSDB Telnet API](http://opentsdb.net/docs/build/html/api_telnet/put.html) for more details. ## Examples 2 STables will be created automatically and each STable has 4 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.002544s) taos> select tbname, * from `meters_current`; tbname | _ts | _value | groupid | location | ================================================================================================================================== t_0e7bcfa21a02331c06764f275... | 2022-03-28 09:56:51.249 | 10.800000000 | 3 | California.LosAngeles | t_0e7bcfa21a02331c06764f275... | 2022-03-28 09:56:51.250 | 11.300000000 | 3 | California.LosAngeles | t_7e7b26dd860280242c6492a16... | 2022-03-28 09:56:51.249 | 10.300000000 | 2 | California.SanFrancisco | t_7e7b26dd860280242c6492a16... | 2022-03-28 09:56:51.250 | 12.600000000 | 2 | California.SanFrancisco | Query OK, 4 row(s) in set (0.005399s) ``` ## Query Examples If you want query the data of `location=California.LosAngeles groupid=3`, here is the query SQL: ```sql SELECT * FROM `meters_current` WHERE location = "California.LosAngeles" AND groupid = 3; ```