| import{_ as s,c as n,b as a,o as i}from"./app-W3EENNaa.js";const l={};function t(r,e){return i(),n("div",null,e[0]||(e[0]=[a(`<h1 id="sql-reference" tabindex="-1"><a class="header-anchor" href="#sql-reference"><span>SQL Reference</span></a></h1><p>In this part, we will introduce you IoTDB's Query Language. IoTDB offers you a SQL-like query language for interacting with IoTDB, the query language can be devided into 4 major parts:</p><ul><li>Schema Statement: statements about schema management are all listed in this section.</li><li>Data Management Statement: statements about data management (such as: data insertion, data query, etc.) are all listed in this section.</li><li>Database Management Statement: statements about database management and authentication are all listed in this section.</li><li>Functions: functions that IoTDB offers are all listed in this section.</li></ul><p>All of these statements are write in IoTDB's own syntax, for details about the syntax composition, please check the <code>Reference</code> section.</p><h2 id="show-version" tabindex="-1"><a class="header-anchor" href="#show-version"><span>Show Version</span></a></h2><div class="language-sql line-numbers-mode" data-highlighter="prismjs" data-ext="sql" data-title="sql"><pre><code><span class="line"><span class="token keyword">show</span> version</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">+---------------+</span> |
| <span class="line">| version|</span> |
| <span class="line">+---------------+</span> |
| <span class="line">|0.13.0-SNAPSHOT|</span> |
| <span class="line">+---------------+</span> |
| <span class="line">Total line number = 1</span> |
| <span class="line">It costs 0.417s</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="schema-statement" tabindex="-1"><a class="header-anchor" href="#schema-statement"><span>Schema Statement</span></a></h2><ul><li>Set Storage Group</li></ul><div class="language-SQL line-numbers-mode" data-highlighter="prismjs" data-ext="SQL" data-title="SQL"><pre><code><span class="line">SET STORAGE GROUP TO <FullPath></span> |
| <span class="line">Eg: IoTDB > SET STORAGE GROUP TO root.ln.wf01.wt01</span> |
| <span class="line">Note: FullPath can not include wildcard \`*\` or \`**\`</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Delete Storage Group</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">DELETE STORAGE GROUP <PathPattern> [COMMA <PathPattern>]*</span> |
| <span class="line">Eg: IoTDB > DELETE STORAGE GROUP root.ln.wf01.wt01</span> |
| <span class="line">Eg: IoTDB > DELETE STORAGE GROUP root.ln.wf01.wt01, root.ln.wf01.wt02</span> |
| <span class="line">Eg: IoTDB > DELETE STORAGE GROUP root.ln.wf01.*</span> |
| <span class="line">Eg: IoTDB > DELETE STORAGE GROUP root.**</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create Timeseries Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE TIMESERIES <FullPath> WITH <AttributeClauses></span> |
| <span class="line">alias</span> |
| <span class="line"> : LR_BRACKET ID RR_BRACKET</span> |
| <span class="line"> ;</span> |
| <span class="line">attributeClauses</span> |
| <span class="line"> : DATATYPE OPERATOR_EQ <DataTypeValue> </span> |
| <span class="line"> COMMA ENCODING OPERATOR_EQ <EncodingValue></span> |
| <span class="line"> (COMMA (COMPRESSOR | COMPRESSION) OPERATOR_EQ <CompressorValue>)?</span> |
| <span class="line"> (COMMA property)*</span> |
| <span class="line"> tagClause</span> |
| <span class="line"> attributeClause</span> |
| <span class="line"> ;</span> |
| <span class="line">attributeClause</span> |
| <span class="line"> : ATTRIBUTES LR_BRACKET propertyClause (COMMA propertyClause)* RR_BRACKET</span> |
| <span class="line"> ;</span> |
| <span class="line">tagClause</span> |
| <span class="line"> : TAGS LR_BRACKET propertyClause (COMMA propertyClause)* RR_BRACKET</span> |
| <span class="line"> ;</span> |
| <span class="line">propertyClause</span> |
| <span class="line"> : name=ID OPERATOR_EQ propertyValue</span> |
| <span class="line"> ;</span> |
| <span class="line">DataTypeValue: BOOLEAN | DOUBLE | FLOAT | INT32 | INT64 | TEXT</span> |
| <span class="line">EncodingValue: GORILLA | PLAIN | RLE | TS_2DIFF | REGULAR</span> |
| <span class="line">CompressorValue: UNCOMPRESSED | SNAPPY</span> |
| <span class="line">AttributesType: SDT | COMPDEV | COMPMINTIME | COMPMAXTIME</span> |
| <span class="line">PropertyValue: ID | constant</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, COMPRESSOR=SNAPPY, MAX_POINT_NUMBER=3</span> |
| <span class="line">Eg: CREATE TIMESERIES root.turbine.d0.s0(temperature) WITH DATATYPE=FLOAT, ENCODING=RLE, COMPRESSOR=SNAPPY tags(unit=f, description='turbine this is a test1') attributes(H_Alarm=100, M_Alarm=50)</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, LOSS=SDT, COMPDEV=0.01</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, LOSS=SDT, COMPDEV=0.01, COMPMINTIME=3</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, LOSS=SDT, COMPDEV=0.01, COMPMINTIME=2, COMPMAXTIME=15</span> |
| <span class="line">Note: Datatype and encoding type must be corresponding. Please check Chapter 3 Encoding Section for details.</span> |
| <span class="line">Note: When propertyValue is SDT, it is required to set compression deviation COMPDEV, which is the maximum absolute difference between values.</span> |
| <span class="line">Note: For SDT, values withtin COMPDEV will be discarded.</span> |
| <span class="line">Note: For SDT, it is optional to set compression minimum COMPMINTIME, which is the minimum time difference between stored values for purpose of noise reduction.</span> |
| <span class="line">Note: For SDT, it is optional to set compression maximum COMPMAXTIME, which is the maximum time difference between stored values regardless of COMPDEV.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create Timeseries Statement (Simplified version, from v0.13)</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE TIMESERIES <FullPath> <SimplifiedAttributeClauses></span> |
| <span class="line">SimplifiedAttributeClauses</span> |
| <span class="line"> : WITH? (DATATYPE OPERATOR_EQ)? <DataTypeValue> </span> |
| <span class="line"> ENCODING OPERATOR_EQ <EncodingValue></span> |
| <span class="line"> ((COMPRESSOR | COMPRESSION) OPERATOR_EQ <CompressorValue>)?</span> |
| <span class="line"> (COMMA property)*</span> |
| <span class="line"> tagClause</span> |
| <span class="line"> attributeClause</span> |
| <span class="line"> ;</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.status BOOLEAN ENCODING=PLAIN</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE COMPRESSOR=SNAPPY MAX_POINT_NUMBER=3</span> |
| <span class="line">Eg: CREATE TIMESERIES root.turbine.d0.s0(temperature) FLOAT ENCODING=RLE COMPRESSOR=SNAPPY tags(unit=f, description='turbine this is a test1') attributes(H_Alarm=100, M_Alarm=50)</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE LOSS=SDT COMPDEV=0.01</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE LOSS=SDT COMPDEV=0.01 COMPMINTIME=3</span> |
| <span class="line">Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE LOSS=SDT COMPDEV=0.01 COMPMINTIME=2 COMPMAXTIME=15</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create Aligned Timeseries Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE ALIGNED TIMESERIES <FullPath> alignedMeasurements</span> |
| <span class="line">alignedMeasurements</span> |
| <span class="line"> : LR_BRACKET nodeNameWithoutWildcard attributeClauses</span> |
| <span class="line"> (COMMA nodeNameWithoutWildcard attributeClauses)+ RR_BRACKET</span> |
| <span class="line"> ;</span> |
| <span class="line">Eg: CREATE ALIGNED TIMESERIES root.ln.wf01.GPS(lat FLOAT ENCODING=GORILLA, lon FLOAT ENCODING=GORILLA COMPRESSOR=SNAPPY)</span> |
| <span class="line">Note: It is not supported to set different compression for a group of aligned timeseries.</span> |
| <span class="line">Note: It is not currently supported to set an alias, tag, and attribute for aligned timeseries.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create Schema Template Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE SCHEMA TEMPLATE <TemplateName> LR_BRACKET <TemplateMeasurementClause> (COMMA plateMeasurementClause>)* RR_BRACKET</span> |
| <span class="line">templateMeasurementClause</span> |
| <span class="line"> : suffixPath attributeClauses #nonAlignedTemplateMeasurement</span> |
| <span class="line"> | suffixPath LR_BRACKET nodeNameWithoutWildcard attributeClauses </span> |
| <span class="line"> (COMMA nodeNameWithoutWildcard attributeClauses)+ RR_BRACKET #alignedTemplateMeasurement</span> |
| <span class="line"> ;</span> |
| <span class="line">Eg: CREATE SCHEMA TEMPLATE temp1(</span> |
| <span class="line"> s1 INT32 encoding=Gorilla, compression=SNAPPY,</span> |
| <span class="line"> vector1(</span> |
| <span class="line"> s1 INT32 encoding=Gorilla,</span> |
| <span class="line"> s2 FLOAT encoding=RLE, compression=SNAPPY)</span> |
| <span class="line"> )</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Set Schema Template Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SET SCHEMA TEMPLATE <TemplateName> TO <PrefixPath></span> |
| <span class="line">Eg: SET SCHEMA TEMPLATE temp1 TO root.beijing</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create Timeseries Of Schema Template Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE TIMESERIES OF SCHEMA TEMPLATE ON <PrefixPath></span> |
| <span class="line">Eg: CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.beijing</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Unset Schema Template Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">UNSET SCHEMA TEMPLATE <TemplateName> FROM <PrefixPath></span> |
| <span class="line">Eg: UNSET SCHEMA TEMPLATE temp1 FROM root.beijing</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Delete Timeseries Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">DELETE TIMESERIES <PathPattern> [COMMA <PathPattern>]*</span> |
| <span class="line">Eg: IoTDB > DELETE TIMESERIES root.ln.wf01.wt01.status</span> |
| <span class="line">Eg: IoTDB > DELETE TIMESERIES root.ln.wf01.wt01.status, root.ln.wf01.wt01.temperature</span> |
| <span class="line">Eg: IoTDB > DELETE TIMESERIES root.ln.wf01.wt01.*</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Alter Timeseries Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">ALTER TIMESERIES fullPath alterClause</span> |
| <span class="line">alterClause</span> |
| <span class="line"> : RENAME beforeName=ID TO currentName=ID</span> |
| <span class="line"> | SET property (COMMA property)*</span> |
| <span class="line"> | DROP ID (COMMA ID)*</span> |
| <span class="line"> | ADD TAGS property (COMMA property)*</span> |
| <span class="line"> | ADD ATTRIBUTES property (COMMA property)*</span> |
| <span class="line"> | UPSERT tagClause attributeClause</span> |
| <span class="line"> ;</span> |
| <span class="line">attributeClause</span> |
| <span class="line"> : (ATTRIBUTES LR_BRACKET property (COMMA property)* RR_BRACKET)?</span> |
| <span class="line"> ;</span> |
| <span class="line">tagClause</span> |
| <span class="line"> : (TAGS LR_BRACKET property (COMMA property)* RR_BRACKET)?</span> |
| <span class="line"> ;</span> |
| <span class="line">Eg: ALTER timeseries root.turbine.d1.s1 RENAME tag1 TO newTag1</span> |
| <span class="line">Eg: ALTER timeseries root.turbine.d1.s1 SET tag1=newV1, attr1=newV1</span> |
| <span class="line">Eg: ALTER timeseries root.turbine.d1.s1 DROP tag1, tag2</span> |
| <span class="line">Eg: ALTER timeseries root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4</span> |
| <span class="line">Eg: ALTER timeseries root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4</span> |
| <span class="line">EG: ALTER timeseries root.turbine.d1.s1 UPSERT TAGS(tag2=newV2, tag3=v3) ATTRIBUTES(attr3=v3, attr4=v4)</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show All Timeseries Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW TIMESERIES</span> |
| <span class="line">Eg: IoTDB > SHOW TIMESERIES</span> |
| <span class="line">Note: This statement can only be used in IoTDB Client. If you need to show all timeseries in JDBC, please use \`DataBaseMetadata\` interface.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Specific Timeseries Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW TIMESERIES <Path></span> |
| <span class="line">Eg: IoTDB > SHOW TIMESERIES root.**</span> |
| <span class="line">Eg: IoTDB > SHOW TIMESERIES root.ln.**</span> |
| <span class="line">Eg: IoTDB > SHOW TIMESERIES root.ln.*.*.status</span> |
| <span class="line">Eg: IoTDB > SHOW TIMESERIES root.ln.wf01.wt01.status</span> |
| <span class="line">Note: The path can be timeseries path or path pattern.</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Specific Timeseries Statement with where clause</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW TIMESERIES pathPattern? showWhereClause?</span> |
| <span class="line">showWhereClause</span> |
| <span class="line"> : WHERE (property | containsExpression)</span> |
| <span class="line"> ;</span> |
| <span class="line">containsExpression</span> |
| <span class="line"> : name=ID OPERATOR_CONTAINS value=propertyValue</span> |
| <span class="line"> ;</span> |
| <span class="line"></span> |
| <span class="line">Eg: show timeseries root.ln.** where unit='c'</span> |
| <span class="line">Eg: show timeseries root.ln.** where description contains 'test1'</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Specific Timeseries Statement with where clause start from offset and limit the total number of result</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW TIMESERIES pathPattern? showWhereClause? limitClause?</span> |
| <span class="line"></span> |
| <span class="line">showWhereClause</span> |
| <span class="line"> : WHERE (property | containsExpression)</span> |
| <span class="line"> ;</span> |
| <span class="line">containsExpression</span> |
| <span class="line"> : name=ID OPERATOR_CONTAINS value=propertyValue</span> |
| <span class="line"> ;</span> |
| <span class="line">limitClause</span> |
| <span class="line"> : LIMIT INT offsetClause?</span> |
| <span class="line"> | offsetClause? LIMIT INT</span> |
| <span class="line"> ;</span> |
| <span class="line"> </span> |
| <span class="line">Eg: show timeseries root.ln.** where unit='c'</span> |
| <span class="line">Eg: show timeseries root.ln.** where description contains 'test1'</span> |
| <span class="line">Eg: show timeseries root.ln.** where unit='c' limit 10 offset 10</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Storage Group Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW STORAGE GROUP</span> |
| <span class="line">Eg: IoTDB > SHOW STORAGE GROUP</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Specific Storage Group Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW STORAGE GROUP <Path></span> |
| <span class="line">Eg: IoTDB > SHOW STORAGE GROUP root.*</span> |
| <span class="line">Eg: IoTDB > SHOW STORAGE GROUP root.ln</span> |
| <span class="line">Note: The path can be full path or path pattern.</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Merge Status Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW MERGE INFO</span> |
| <span class="line">Eg: IoTDB > SHOW MERGE INFO</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Count Timeseries Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">COUNT TIMESERIES <Path></span> |
| <span class="line">Eg: IoTDB > COUNT TIMESERIES root.**</span> |
| <span class="line">Eg: IoTDB > COUNT TIMESERIES root.ln.**</span> |
| <span class="line">Eg: IoTDB > COUNT TIMESERIES root.ln.*.*.status</span> |
| <span class="line">Eg: IoTDB > COUNT TIMESERIES root.ln.wf01.wt01.status</span> |
| <span class="line">Note: The path can be timeseries path or path pattern.</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">COUNT TIMESERIES <Path> GROUP BY LEVEL=<INTEGER></span> |
| <span class="line">Eg: IoTDB > COUNT TIMESERIES root.** GROUP BY LEVEL=1</span> |
| <span class="line">Eg: IoTDB > COUNT TIMESERIES root.ln.** GROUP BY LEVEL=2</span> |
| <span class="line">Eg: IoTDB > COUNT TIMESERIES root.ln.wf01.* GROUP BY LEVEL=3</span> |
| <span class="line">Note: The path can be timeseries path or path pattern.</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Count Nodes Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">COUNT NODES <Path> LEVEL=<INTEGER></span> |
| <span class="line">Eg: IoTDB > COUNT NODES root.** LEVEL=2</span> |
| <span class="line">Eg: IoTDB > COUNT NODES root.ln.** LEVEL=2</span> |
| <span class="line">Eg: IoTDB > COUNT NODES root.ln.* LEVEL=3</span> |
| <span class="line">Eg: IoTDB > COUNT NODES root.ln.wf01 LEVEL=3</span> |
| <span class="line">Note: The path can be full path or path pattern.</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show All Devices Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW DEVICES (WITH STORAGE GROUP)? limitClause? </span> |
| <span class="line">Eg: IoTDB > SHOW DEVICES</span> |
| <span class="line">Eg: IoTDB > SHOW DEVICES WITH STORAGE GROUP</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Specific Devices Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW DEVICES <PathPattern> (WITH STORAGE GROUP)? limitClause?</span> |
| <span class="line">Eg: IoTDB > SHOW DEVICES root.**</span> |
| <span class="line">Eg: IoTDB > SHOW DEVICES root.ln.**</span> |
| <span class="line">Eg: IoTDB > SHOW DEVICES root.*.wf01</span> |
| <span class="line">Eg: IoTDB > SHOW DEVICES root.ln WITH STORAGE GROUP</span> |
| <span class="line">Eg: IoTDB > SHOW DEVICES root.*.wf01 WITH STORAGE GROUP</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Child Paths of Root Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW CHILD PATHS</span> |
| <span class="line">Eg: IoTDB > SHOW CHILD PATHS</span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show Child Paths Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW CHILD PATHS <PathPattern></span> |
| <span class="line">Eg: IoTDB > SHOW CHILD PATHS root</span> |
| <span class="line">Eg: IoTDB > SHOW CHILD PATHS root.ln</span> |
| <span class="line">Eg: IoTDB > SHOW CHILD PATHS root.*.wf01</span> |
| <span class="line">Eg: IoTDB > SHOW CHILD PATHS root.ln.wf* </span> |
| <span class="line">Note: This statement can be used in IoTDB Client and JDBC.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create snapshot for schema</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE SNAPSHOT FOR SCHEMA</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h2 id="data-management-statement" tabindex="-1"><a class="header-anchor" href="#data-management-statement"><span>Data Management Statement</span></a></h2><ul><li>Insert Record Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">INSERT INTO <PrefixPath> LPAREN TIMESTAMP COMMA <Sensor> [COMMA <Sensor>]* RPAREN VALUES LPAREN <TimeValue>, <PointValue> [COMMA <PointValue>]* RPAREN</span> |
| <span class="line">Sensor : Identifier</span> |
| <span class="line">Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,status) values(1509465600000,true)</span> |
| <span class="line">Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,status) VALUES(NOW(), false)</span> |
| <span class="line">Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,temperature) VALUES(2017-11-01T00:17:00.000+08:00,24.22028)</span> |
| <span class="line">Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) VALUES (1509466680000,false,20.060787)</span> |
| <span class="line">Eg: IoTDB > INSERT INTO root.sg.d1(timestamp,(s1,s2),(s3,s4)) VALUES (1509466680000,(1.0,2),(NULL,4))</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line">Note: The order of Sensor and PointValue need one-to-one correspondence</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Delete Record Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">DELETE FROM <PathPattern> [COMMA <PathPattern>]* [WHERE <WhereClause>]?</span> |
| <span class="line">WhereClause : <Condition> [(AND) <Condition>]*</span> |
| <span class="line">Condition : <TimeExpr> [(AND) <TimeExpr>]*</span> |
| <span class="line">TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)</span> |
| <span class="line">Eg: DELETE FROM root.ln.wf01.wt01.temperature WHERE time > 2016-01-05T00:15:00+08:00 and time < 2017-11-1T00:05:00+08:00</span> |
| <span class="line">Eg: DELETE FROM root.ln.wf01.wt01.status, root.ln.wf01.wt01.temperature WHERE time < NOW()</span> |
| <span class="line">Eg: DELETE FROM root.ln.wf01.wt01.* WHERE time >= 1509466140000</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Select Record Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">SelectClause : <SelectPath> (COMMA <SelectPath>)*</span> |
| <span class="line">SelectPath : <FUNCTION> LPAREN <Path> RPAREN | <Path></span> |
| <span class="line">FUNCTION : ‘COUNT’ , ‘MIN_TIME’, ‘MAX_TIME’, ‘MIN_VALUE’, ‘MAX_VALUE’</span> |
| <span class="line">FromClause : <PrefixPath> (COMMA <PrefixPath>)?</span> |
| <span class="line">WhereClause : <Condition> [(AND | OR) <Condition>]*</span> |
| <span class="line">Condition : <Expression> [(AND | OR) <Expression>]*</span> |
| <span class="line">Expression : [NOT | !]? <TimeExpr> | [NOT | !]? <SensorExpr></span> |
| <span class="line">TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)</span> |
| <span class="line">RelativeTimeDurationUnit = Integer ('Y'|'MO'|'W'|'D'|'H'|'M'|'S'|'MS'|'US'|'NS')</span> |
| <span class="line">RelativeTime : (now() | <TimeValue>) [(+|-) RelativeTimeDurationUnit]+</span> |
| <span class="line">SensorExpr : (<Timeseries> | <Path>) PrecedenceEqualOperator <PointValue></span> |
| <span class="line">Eg: IoTDB > SELECT status, temperature FROM root.ln.wf01.wt01 WHERE temperature < 24 and time > 2017-11-1 0:13:00</span> |
| <span class="line">Eg. IoTDB > SELECT ** FROM root</span> |
| <span class="line">Eg. IoTDB > SELECT * FROM root.**</span> |
| <span class="line">Eg. IoTDB > SELECT * FROM root where time > now() - 5m</span> |
| <span class="line">Eg. IoTDB > SELECT * FROM root.ln.*.wf*</span> |
| <span class="line">Eg. IoTDB > SELECT COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25</span> |
| <span class="line">Eg. IoTDB > SELECT MIN_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25</span> |
| <span class="line">Eg. IoTDB > SELECT MAX_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature > 24</span> |
| <span class="line">Eg. IoTDB > SELECT MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature > 23</span> |
| <span class="line">Eg. IoTDB > SELECT MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25</span> |
| <span class="line">Eg. IoTDB > SELECT COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25 GROUP BY LEVEL=1</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <Path>(SelectClause) + <PrefixPath>(FromClause) = <Timeseries></span> |
| <span class="line">Note: If the <SensorExpr>(WhereClause) is started with <Path> and not with ROOT, the statement needs to satisfy this constraint: <PrefixPath>(FromClause) + <Path>(SensorExpr) = <Timeseries></span> |
| <span class="line">Note: In Version 0.7.0, if <WhereClause> includes \`OR\`, time filter can not be used.</span> |
| <span class="line">Note: There must be a space on both sides of the plus and minus operator appearing in the time expression </span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Group By Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> GROUP BY <GroupByTimeClause></span> |
| <span class="line">SelectClause : <Function> [COMMA < Function >]*</span> |
| <span class="line">Function : <AggregationFunction> LPAREN <Path> RPAREN</span> |
| <span class="line">FromClause : <PrefixPath></span> |
| <span class="line">WhereClause : <Condition> [(AND | OR) <Condition>]*</span> |
| <span class="line">Condition : <Expression> [(AND | OR) <Expression>]*</span> |
| <span class="line">Expression : [NOT | !]? <TimeExpr> | [NOT | !]? <SensorExpr></span> |
| <span class="line">TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)</span> |
| <span class="line">RelativeTimeDurationUnit = Integer ('Y'|'MO'|'W'|'D'|'H'|'M'|'S'|'MS'|'US'|'NS')</span> |
| <span class="line">RelativeTime : (now() | <TimeValue>) [(+|-) RelativeTimeDurationUnit]+</span> |
| <span class="line">SensorExpr : (<Timeseries> | <Path>) PrecedenceEqualOperator <PointValue></span> |
| <span class="line">GroupByTimeClause : LPAREN <TimeInterval> COMMA <TimeUnit> (COMMA <TimeUnit>)? RPAREN</span> |
| <span class="line">TimeInterval: LSBRACKET <TimeValue> COMMA <TimeValue> RRBRACKET | LRBRACKET <TimeValue> COMMA <TimeValue> RSBRACKET</span> |
| <span class="line">TimeUnit : Integer <DurationUnit></span> |
| <span class="line">DurationUnit : "ms" | "s" | "m" | "h" | "d" | "w" | "mo"</span> |
| <span class="line">Eg: SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 where temperature < 24 GROUP BY([1509465720000, 1509466380000), 5m)</span> |
| <span class="line">Eg: SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 where temperature < 24 GROUP BY((1509465720000, 1509466380000], 5m)</span> |
| <span class="line">Eg. SELECT COUNT (status), MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE time < 1509466500000 GROUP BY([1509465720000, 1509466380000), 5m, 10m)</span> |
| <span class="line">Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ([1509466140000, 1509466380000), 3m, 5ms)</span> |
| <span class="line">Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 3m, 5ms)</span> |
| <span class="line">Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 1mo)</span> |
| <span class="line">Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 1mo, 1mo)</span> |
| <span class="line">Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 1mo, 2mo)</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <Path>(SelectClause) + <PrefixPath>(FromClause) = <Timeseries></span> |
| <span class="line">Note: If the <SensorExpr>(WhereClause) is started with <Path> and not with ROOT, the statement needs to satisfy this constraint: <PrefixPath>(FromClause) + <Path>(SensorExpr) = <Timeseries></span> |
| <span class="line">Note: <TimeValue>(TimeInterval) needs to be greater than 0</span> |
| <span class="line">Note: First <TimeValue>(TimeInterval) in needs to be smaller than second <TimeValue>(TimeInterval)</span> |
| <span class="line">Note: <TimeUnit> needs to be greater than 0</span> |
| <span class="line">Note: Third <TimeUnit> if set shouldn't be smaller than second <TimeUnit></span> |
| <span class="line">Note: If the second <DurationUnit> is "mo", the third <DurationUnit> need to be in month</span> |
| <span class="line">Note: If the third <DurationUnit> is "mo", the second <DurationUnit> can be in any unit</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Fill Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> FILL <FillClause></span> |
| <span class="line">SelectClause : <Path> [COMMA <Path>]*</span> |
| <span class="line">FromClause : < PrefixPath > [COMMA < PrefixPath >]*</span> |
| <span class="line">WhereClause : <WhereExpression></span> |
| <span class="line">WhereExpression : TIME EQUAL <TimeValue></span> |
| <span class="line">FillClause : LPAREN <TypeClause> [COMMA <TypeClause>]* RPAREN</span> |
| <span class="line">TypeClause : <Int32Clause> | <Int64Clause> | <FloatClause> | <DoubleClause> | <BoolClause> | <TextClause></span> |
| <span class="line">Int32Clause: INT32 LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">Int64Clause: INT64 LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">FloatClause: FLOAT LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">DoubleClause: DOUBLE LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">BoolClause: BOOLEAN LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">TextClause: TEXT LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">PreviousClause : PREVIOUS [COMMA <ValidPreviousTime>]?</span> |
| <span class="line">LinearClause : LINEAR [COMMA <ValidPreviousTime> COMMA <ValidBehindTime>]?</span> |
| <span class="line">ValidPreviousTime, ValidBehindTime: <TimeUnit></span> |
| <span class="line">TimeUnit : Integer <DurationUnit></span> |
| <span class="line">DurationUnit : "ms" | "s" | "m" | "h" | "d" | "w"</span> |
| <span class="line">Eg: SELECT temperature FROM root.ln.wf01.wt01 WHERE time = 2017-11-01T16:37:50.000 FILL(float[previous, 1m])</span> |
| <span class="line">Eg: SELECT temperature,status FROM root.ln.wf01.wt01 WHERE time = 2017-11-01T16:37:50.000 FILL (float[linear, 1m, 1m], boolean[previous, 1m])</span> |
| <span class="line">Eg: SELECT temperature,status,hardware FROM root.ln.wf01.wt01 WHERE time = 2017-11-01T16:37:50.000 FILL (float[linear, 1m, 1m], boolean[previous, 1m], text[previous])</span> |
| <span class="line">Eg: SELECT temperature,status,hardware FROM root.ln.wf01.wt01 WHERE time = 2017-11-01T16:37:50.000 FILL (float[linear], boolean[previous, 1m], text[previous])</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath>(FromClause) + <Path>(SelectClause) = <Timeseries></span> |
| <span class="line">Note: Integer in <TimeUnit> needs to be greater than 0</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Group By Fill Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> GROUP BY <GroupByClause> (FILL <GROUPBYFillClause>)?</span> |
| <span class="line">GroupByClause : LPAREN <TimeInterval> COMMA <TimeUnit> RPAREN</span> |
| <span class="line">GROUPBYFillClause : LPAREN <TypeClause> RPAREN</span> |
| <span class="line">TypeClause : <AllClause> | <Int32Clause> | <Int64Clause> | <FloatClause> | <DoubleClause> | <BoolClause> | <TextClause> </span> |
| <span class="line">AllClause: ALL LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">Int32Clause: INT32 LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">Int64Clause: INT64 LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">FloatClause: FLOAT LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">DoubleClause: DOUBLE LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">BoolClause: BOOLEAN LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">TextClause: TEXT LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET</span> |
| <span class="line">PreviousClause : PREVIOUS</span> |
| <span class="line">PreviousUntilLastClause : PREVIOUSUNTILLAST</span> |
| <span class="line">Eg: SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (float[PREVIOUS])</span> |
| <span class="line">Eg: SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY((15, 100], 5m) FILL (float[PREVIOUS])</span> |
| <span class="line">Eg: SELECT last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (int32[PREVIOUSUNTILLAST])</span> |
| <span class="line">Eg: SELECT last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (int32[PREVIOUSUNTILLAST, 5m])</span> |
| <span class="line">Eg: SELECT last_value(temperature), last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (ALL[PREVIOUS])</span> |
| <span class="line">Eg: SELECT last_value(temperature), last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (ALL[PREVIOUS, 5m])</span> |
| <span class="line">Note: In group by fill, sliding step is not supported in group by clause</span> |
| <span class="line">Note: Now, only last_value aggregation function is supported in group by fill.</span> |
| <span class="line">Note: Linear fill is not supported in group by fill.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Order by time Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> GROUP BY <GroupByClause> (FILL <GROUPBYFillClause>)? orderByTimeClause?</span> |
| <span class="line">orderByTimeClause: order by time (asc | desc)?</span> |
| <span class="line"></span> |
| <span class="line">Eg: SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (float[PREVIOUS]) order by time desc</span> |
| <span class="line">Eg: SELECT * from root.** order by time desc</span> |
| <span class="line">Eg: SELECT * from root.** order by time desc align by device </span> |
| <span class="line">Eg: SELECT * from root.** order by time desc disable align</span> |
| <span class="line">Eg: SELECT last * from root.** order by time desc</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Limit Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> [WHERE <WhereClause>] [<LIMITClause>] [<SLIMITClause>]</span> |
| <span class="line">SelectClause : [<Path> | Function]+</span> |
| <span class="line">Function : <AggregationFunction> LPAREN <Path> RPAREN</span> |
| <span class="line">FromClause : <Path></span> |
| <span class="line">WhereClause : <Condition> [(AND | OR) <Condition>]*</span> |
| <span class="line">Condition : <Expression> [(AND | OR) <Expression>]*</span> |
| <span class="line">Expression: [NOT|!]?<TimeExpr> | [NOT|!]?<SensorExpr></span> |
| <span class="line">TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)</span> |
| <span class="line">RelativeTimeDurationUnit = Integer ('Y'|'MO'|'W'|'D'|'H'|'M'|'S'|'MS'|'US'|'NS')</span> |
| <span class="line">RelativeTime : (now() | <TimeValue>) [(+|-) RelativeTimeDurationUnit]+</span> |
| <span class="line">SensorExpr : (<Timeseries>|<Path>) PrecedenceEqualOperator <PointValue></span> |
| <span class="line">LIMITClause : LIMIT <N> [OFFSETClause]?</span> |
| <span class="line">N : Integer</span> |
| <span class="line">OFFSETClause : OFFSET <OFFSETValue></span> |
| <span class="line">OFFSETValue : Integer</span> |
| <span class="line">SLIMITClause : SLIMIT <SN> [SOFFSETClause]?</span> |
| <span class="line">SN : Integer</span> |
| <span class="line">SOFFSETClause : SOFFSET <SOFFSETValue></span> |
| <span class="line">SOFFSETValue : Integer</span> |
| <span class="line">Eg: IoTDB > SELECT status, temperature FROM root.ln.wf01.wt01 WHERE temperature < 24 and time > 2017-11-1 0:13:00 LIMIT 3 OFFSET 2</span> |
| <span class="line">Eg. IoTDB > SELECT COUNT (status), MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE time < 1509466500000 GROUP BY([1509465720000, 1509466380000], 5m) LIMIT 3</span> |
| <span class="line">Note: N, OFFSETValue, SN and SOFFSETValue must be greater than 0.</span> |
| <span class="line">Note: The order of <LIMITClause> and <SLIMITClause> does not affect the grammatical correctness.</span> |
| <span class="line">Note: <FillClause> can not use <LIMITClause> but not <SLIMITClause>.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Align By Device Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">AlignbyDeviceClause : ALIGN BY DEVICE</span> |
| <span class="line"></span> |
| <span class="line">Rules: </span> |
| <span class="line">1. Both uppercase and lowercase are ok. </span> |
| <span class="line">Correct example: select * from root.sg1.* align by device </span> |
| <span class="line">Correct example: select * from root.sg1.* ALIGN BY DEVICE </span> |
| <span class="line"></span> |
| <span class="line">2. AlignbyDeviceClause can only be used at the end of a query statement. </span> |
| <span class="line">Correct example: select * from root.sg1.* where time > 10 align by device </span> |
| <span class="line">Wrong example: select * from root.sg1.* align by device where time > 10 </span> |
| <span class="line"></span> |
| <span class="line">3. The paths of the SELECT clause can only be single level. In other words, the paths of the SELECT clause can only be measurements or STAR, without DOT.</span> |
| <span class="line">Correct example: select s0,s1 from root.sg1.* align by device </span> |
| <span class="line">Correct example: select s0,s1 from root.sg1.d0, root.sg1.d1 align by device </span> |
| <span class="line">Correct example: select * from root.sg1.* align by device </span> |
| <span class="line">Correct example: select * from root.** align by device </span> |
| <span class="line">Correct example: select s0,s1,* from root.*.* align by device </span> |
| <span class="line">Wrong example: select d0.s1, d0.s2, d1.s0 from root.sg1 align by device </span> |
| <span class="line">Wrong example: select *.s0, *.s1 from root.* align by device </span> |
| <span class="line">Wrong example: select *.*.* from root align by device</span> |
| <span class="line"></span> |
| <span class="line">4. The data types of the same measurement column should be the same across devices. </span> |
| <span class="line">Note that when it comes to aggregated paths, the data type of the measurement column will reflect </span> |
| <span class="line">the aggregation function rather than the original timeseries.</span> |
| <span class="line"></span> |
| <span class="line">Correct example: select s0 from root.sg1.d0,root.sg1.d1 align by device </span> |
| <span class="line">root.sg1.d0.s0 and root.sg1.d1.s0 are both INT32. </span> |
| <span class="line"></span> |
| <span class="line">Correct example: select count(s0) from root.sg1.d0,root.sg1.d1 align by device </span> |
| <span class="line">count(root.sg1.d0.s0) and count(root.sg1.d1.s0) are both INT64. </span> |
| <span class="line"></span> |
| <span class="line">Wrong example: select s0 from root.sg1.d0, root.sg2.d3 align by device </span> |
| <span class="line">root.sg1.d0.s0 is INT32 while root.sg2.d3.s0 is FLOAT. </span> |
| <span class="line"></span> |
| <span class="line">5. The display principle of the result table is that all the columns (no matther whther a column has has existing data) will be shown, with nonexistent cells being null. Besides, the select clause support const column (e.g., 'a', '123' etc..). </span> |
| <span class="line">For example, "select s0,s1,s2,'abc',s1,s2 from root.sg.d0, root.sg.d1, root.sg.d2 align by device". Suppose that the actual existing timeseries are as follows: </span> |
| <span class="line">- root.sg.d0.s0</span> |
| <span class="line">- root.sg.d0.s1</span> |
| <span class="line">- root.sg.d1.s0</span> |
| <span class="line"></span> |
| <span class="line">Then you could expect a table like: </span> |
| <span class="line"></span> |
| <span class="line">| Time | Device | s0 | s1 | s2 | 'abc' | s1 | s2 |</span> |
| <span class="line">| --- | --- | ---| ---| null | 'abc' | ---| null |</span> |
| <span class="line">| 1 |root.sg.d0| 20 | 2.5| null | 'abc' | 2.5| null |</span> |
| <span class="line">| 2 |root.sg.d0| 23 | 3.1| null | 'abc' | 3.1| null |</span> |
| <span class="line">| ... | ... | ...| ...| null | 'abc' | ...| null |</span> |
| <span class="line">| 1 |root.sg.d1| 12 |null| null | 'abc' |null| null |</span> |
| <span class="line">| 2 |root.sg.d1| 19 |null| null | 'abc' |null| null |</span> |
| <span class="line">| ... | ... | ...| ...| null | 'abc' | ...| null |</span> |
| <span class="line"></span> |
| <span class="line">Note that the cells of measurement 's0' and device 'root.sg.d1' are all null. </span> |
| <span class="line"></span> |
| <span class="line">6. The duplicated devices in the prefix paths are neglected. </span> |
| <span class="line">For example, "select s0,s1 from root.sg.d0,root.sg.d0,root.sg.d1 align by device" is equal to "select s0,s1 from root.sg.d0,root.sg.d1 align by device". </span> |
| <span class="line">For example. "select s0,s1 from root.sg.*,root.sg.d0 align by device" is equal to "select s0,s1 from root.sg.* align by device". </span> |
| <span class="line"></span> |
| <span class="line">7. The duplicated measurements in the suffix paths are not neglected. </span> |
| <span class="line">For example, "select s0,s0,s1 from root.sg.* align by device" is not equal to "select s0,s1 from root.sg.* align by device".</span> |
| <span class="line"></span> |
| <span class="line">8. Both time predicates and value predicates are allowed in Where Clause. The paths of the value predicates can be the leaf node or full path started with ROOT. And wildcard is not allowed here. For example:</span> |
| <span class="line">- select * from root.sg.* where time = 1 align by device</span> |
| <span class="line">- select * from root.sg.* where s0 < 100 align by device</span> |
| <span class="line">- select * from root.sg.* where time < 20 AND s0 > 50 align by device</span> |
| <span class="line">- select * from root.sg.d0 where root.sg.d0.s0 = 15 align by device</span> |
| <span class="line"></span> |
| <span class="line">9. More correct examples:</span> |
| <span class="line"> - select * from root.vehicle.* align by device</span> |
| <span class="line"> - select s0,s0,s1 from root.vehicle.* align by device</span> |
| <span class="line"> - select s0,s1 from root.vehicle.* limit 10 offset 1 align by device</span> |
| <span class="line"> - select * from root.vehicle.* slimit 10 soffset 2 align by device</span> |
| <span class="line"> - select * from root.vehicle.* where time > 10 align by device</span> |
| <span class="line"> - select * from root.vehicle.* where time < 10 AND s0 > 25 align by device</span> |
| <span class="line"> - select * from root.vehicle.* where root.vehicle.d0.s0>0 align by device</span> |
| <span class="line"> - select count(*) from root.vehicle align by device</span> |
| <span class="line"> - select sum(*) from root.vehicle.* GROUP BY (20ms,0,[2,50]) align by device</span> |
| <span class="line"> - select * from root.vehicle.* where time = 3 Fill(int32[previous, 5ms]) align by device</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Disable Align Statement</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">Disable Align Clause: DISABLE ALIGN</span> |
| <span class="line"></span> |
| <span class="line">Rules: </span> |
| <span class="line">1. Both uppercase and lowercase are ok. </span> |
| <span class="line">Correct example: select * from root.sg1.* disable align </span> |
| <span class="line">Correct example: select * from root.sg1.* DISABLE ALIGN </span> |
| <span class="line"></span> |
| <span class="line">2. Disable Align Clause can only be used at the end of a query statement. </span> |
| <span class="line">Correct example: select * from root.sg1.* where time > 10 disable align </span> |
| <span class="line">Wrong example: select * from root.sg1.* disable align where time > 10 </span> |
| <span class="line"></span> |
| <span class="line">3. Disable Align Clause cannot be used with Aggregation, Fill Statements, Group By or Group By Device Statements, but can with Limit Statements.</span> |
| <span class="line">Correct example: select * from root.sg1.* limit 3 offset 2 disable align</span> |
| <span class="line">Correct example: select * from root.sg1.* slimit 3 soffset 2 disable align</span> |
| <span class="line">Wrong example: select count(s0),count(s1) from root.sg1.d1 disable align</span> |
| <span class="line">Wrong example: select * from root.vehicle.* where root.vehicle.d0.s0>0 disable align</span> |
| <span class="line">Wrong example: select * from root.vehicle.* align by device disable align</span> |
| <span class="line"></span> |
| <span class="line">4. The display principle of the result table is that only when the column (or row) has existing data will the column (or row) be shown, with nonexistent cells being empty.</span> |
| <span class="line"></span> |
| <span class="line">You could expect a table like:</span> |
| <span class="line">| Time | root.sg.d0.s1 | Time | root.sg.d0.s2 | Time | root.sg.d1.s1 |</span> |
| <span class="line">| --- | --- | --- | --- | --- | --- |</span> |
| <span class="line">| 1 | 100 | 20 | 300 | 400 | 600 |</span> |
| <span class="line">| 2 | 300 | 40 | 800 | 700 | 900 |</span> |
| <span class="line">| 4 | 500 | | | 800 | 1000 |</span> |
| <span class="line">| | | | | 900 | 8000 |</span> |
| <span class="line"></span> |
| <span class="line">5. More correct examples: </span> |
| <span class="line"> - select * from root.vehicle.* disable align</span> |
| <span class="line"> - select s0,s0,s1 from root.vehicle.* disable align</span> |
| <span class="line"> - select s0,s1 from root.vehicle.* limit 10 offset 1 disable align</span> |
| <span class="line"> - select * from root.vehicle.* slimit 10 soffset 2 disable align</span> |
| <span class="line"> - select * from root.vehicle.* where time > 10 disable align</span> |
| <span class="line"></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Select Last Record Statement</li></ul><p>The LAST function returns the last time-value pair of the given timeseries. Currently filters are not supported in LAST queries.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT LAST <SelectClause> FROM <FromClause></span> |
| <span class="line">Select Clause : <Path> [COMMA <Path>]*</span> |
| <span class="line">FromClause : < PrefixPath > [COMMA < PrefixPath >]*</span> |
| <span class="line">WhereClause : <TimeExpr> [(AND | OR) <TimeExpr>]*</span> |
| <span class="line">TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)</span> |
| <span class="line"></span> |
| <span class="line">Eg. SELECT LAST s1 FROM root.sg.d1</span> |
| <span class="line">Eg. SELECT LAST s1, s2 FROM root.sg.d1</span> |
| <span class="line">Eg. SELECT LAST s1 FROM root.sg.d1, root.sg.d2</span> |
| <span class="line">Eg. SELECT LAST s1 FROM root.sg.d1 where time > 100</span> |
| <span class="line">Eg. SELECT LAST s1, s2 FROM root.sg.d1 where time >= 500</span> |
| <span class="line"></span> |
| <span class="line">Rules:</span> |
| <span class="line">1. the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span> |
| <span class="line">2. SELECT LAST only supports time filter that contains '>' or '>=' currently.</span> |
| <span class="line"></span> |
| <span class="line">3. The result set of last query will always be displayed in a fixed three column table format.</span> |
| <span class="line">For example, "select last s1, s2 from root.sg.d1, root.sg.d2", the query result would be:</span> |
| <span class="line"></span> |
| <span class="line">| Time | Path | Value | dataType |</span> |
| <span class="line">| --- | ------------- |------ | -------- |</span> |
| <span class="line">| 5 | root.sg.d1.s1 | 100 | INT32 |</span> |
| <span class="line">| 2 | root.sg.d1.s2 | 400 | INT32 |</span> |
| <span class="line">| 4 | root.sg.d2.s1 | 250 | INT32 |</span> |
| <span class="line">| 9 | root.sg.d2.s2 | 600 | INT32 |</span> |
| <span class="line"></span> |
| <span class="line">4. It is not supported to use "diable align" in LAST query. </span> |
| <span class="line"></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>As Statement</li></ul><p>As statement assigns an alias to time seires queried in SELECT statement</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">You can use as statement in all queries, but some rules are restricted about wildcard.</span> |
| <span class="line"></span> |
| <span class="line">1. Raw data query</span> |
| <span class="line">select s1 as speed, s2 as temperature from root.sg.d1</span> |
| <span class="line"></span> |
| <span class="line">The result set will be like:</span> |
| <span class="line">| Time | speed | temperature |</span> |
| <span class="line">| ... | ... | .... |</span> |
| <span class="line"></span> |
| <span class="line">2. Aggregation query</span> |
| <span class="line">select count(s1) as s1_num, max_value(s2) as s2_max from root.sg.d1</span> |
| <span class="line"></span> |
| <span class="line">3. Down-frequence query</span> |
| <span class="line">select count(s1) as s1_num from root.sg.d1 group by ([100,500), 80ms)</span> |
| <span class="line"></span> |
| <span class="line">4. Align by device query</span> |
| <span class="line">select s1 as speed, s2 as temperature from root.sg.d1 align by device</span> |
| <span class="line"></span> |
| <span class="line">select count(s1) as s1_num, count(s2), count(s3) as s3_num from root.sg.d2 align by device</span> |
| <span class="line"></span> |
| <span class="line">5. Last Record query</span> |
| <span class="line">select last s1 as speed, s2 from root.sg.d1</span> |
| <span class="line"></span> |
| <span class="line">Rules:</span> |
| <span class="line">1. In addition to Align by device query,each AS statement has to corresponding to one time series exactly.</span> |
| <span class="line"></span> |
| <span class="line">E.g. select s1 as temperature from root.sg.*</span> |
| <span class="line"></span> |
| <span class="line">At this time if \`root.sg.*\` includes more than one device,then an exception will be thrown。</span> |
| <span class="line"></span> |
| <span class="line">2. In align by device query,the prefix path that each AS statement corresponding to can includes multiple device, but the suffix path can only be single sensor.</span> |
| <span class="line"></span> |
| <span class="line">E.g. select s1 as temperature from root.sg.*</span> |
| <span class="line"></span> |
| <span class="line">In this situation, it will be show correctly even if multiple devices are selected.</span> |
| <span class="line"></span> |
| <span class="line">E.g. select * as temperature from root.sg.d1</span> |
| <span class="line"></span> |
| <span class="line">In this situation, it will throws an exception if * corresponds to multiple sensors.</span> |
| <span class="line"></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Regexp Statement</li></ul><p>Regexp Statement only supports regular expressions with Java standard library style on timeseries which is TEXT data type</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause></span> |
| <span class="line">Select Clause : <Path> [COMMA <Path>]*</span> |
| <span class="line">FromClause : < PrefixPath > [COMMA < PrefixPath >]*</span> |
| <span class="line">WhereClause : andExpression (OPERATOR_OR andExpression)*</span> |
| <span class="line">andExpression : predicate (OPERATOR_AND predicate)*</span> |
| <span class="line">predicate : (suffixPath | fullPath) REGEXP regularExpression</span> |
| <span class="line">regularExpression: Java standard regularexpression, like '^[a-z][0-9]$', [details](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html)</span> |
| <span class="line"></span> |
| <span class="line">Eg. select s1 from root.sg.d1 where s1 regexp '^[0-9]*$'</span> |
| <span class="line">Eg. select s1, s2 FROM root.sg.d1 where s1 regexp '^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$' and s2 regexp '^\\d{15}|\\d{18}$'</span> |
| <span class="line">Eg. select * from root.sg.d1 where s1 regexp '^[a-zA-Z]\\w{5,17}$'</span> |
| <span class="line">Eg. select * from root.sg.d1 where s1 regexp '^\\d{4}-\\d{1,2}-\\d{1,2}' and time > 100</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Like Statement</li></ul><p>The usage of LIKE Statement similar with mysql, but only support timeseries which is TEXT data type</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause></span> |
| <span class="line">Select Clause : <Path> [COMMA <Path>]*</span> |
| <span class="line">FromClause : < PrefixPath > [COMMA < PrefixPath >]*</span> |
| <span class="line">WhereClause : andExpression (OPERATOR_OR andExpression)*</span> |
| <span class="line">andExpression : predicate (OPERATOR_AND predicate)*</span> |
| <span class="line">predicate : (suffixPath | fullPath) LIKE likeExpression</span> |
| <span class="line">likeExpression : string that may contains "%" or "_", while "%value" means a string that ends with the value, "value%" means a string starts with the value, "%value%" means string that contains values, and "_" represents any character.</span> |
| <span class="line"></span> |
| <span class="line">Eg. select s1 from root.sg.d1 where s1 like 'abc'</span> |
| <span class="line">Eg. select s1, s2 from root.sg.d1 where s1 like 'a%bc'</span> |
| <span class="line">Eg. select * from root.sg.d1 where s1 like 'abc_'</span> |
| <span class="line">Eg. select * from root.sg.d1 where s1 like 'abc\\%' and time > 100</span> |
| <span class="line">In this situation, '\\%' means '%' will be escaped</span> |
| <span class="line">The result set will be like:</span> |
| <span class="line">| Time | Path | Value |</span> |
| <span class="line">| --- | ------------ | ----- |</span> |
| <span class="line">| 200 | root.sg.d1.s1| abc% |</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="database-management-statement" tabindex="-1"><a class="header-anchor" href="#database-management-statement"><span>Database Management Statement</span></a></h2><ul><li>Create User</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE USER <userName> <password>; </span> |
| <span class="line">userName:=identifier </span> |
| <span class="line">password:=string</span> |
| <span class="line">Eg: IoTDB > CREATE USER thulab 'pwd';</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Delete User</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">DROP USER <userName>; </span> |
| <span class="line">userName:=identifier</span> |
| <span class="line">Eg: IoTDB > DROP USER xiaoming;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Create Role</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">CREATE ROLE <roleName>; </span> |
| <span class="line">roleName:=identifie</span> |
| <span class="line">Eg: IoTDB > CREATE ROLE admin;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Delete Role</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">DROP ROLE <roleName>; </span> |
| <span class="line">roleName:=identifier</span> |
| <span class="line">Eg: IoTDB > DROP ROLE admin;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Grant User Privileges</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">GRANT USER <userName> PRIVILEGES <privileges> ON <nodeName>; </span> |
| <span class="line">userName:=identifier </span> |
| <span class="line">nodeName:=identifier (DOT identifier)* </span> |
| <span class="line">privileges:= string (COMMA string)*</span> |
| <span class="line">Eg: IoTDB > GRANT USER tempuser PRIVILEGES DELETE_TIMESERIES on root.ln;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Grant Role Privileges</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">GRANT ROLE <roleName> PRIVILEGES <privileges> ON <nodeName>; </span> |
| <span class="line">privileges:= string (COMMA string)* </span> |
| <span class="line">roleName:=identifier </span> |
| <span class="line">nodeName:=identifier (DOT identifier)*</span> |
| <span class="line">Eg: IoTDB > GRANT ROLE temprole PRIVILEGES DELETE_TIMESERIES ON root.ln;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Grant User Role</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">GRANT <roleName> TO <userName>; </span> |
| <span class="line">roleName:=identifier </span> |
| <span class="line">userName:=identifier</span> |
| <span class="line">Eg: IoTDB > GRANT temprole TO tempuser;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Revoke User Privileges</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">REVOKE USER <userName> PRIVILEGES <privileges> ON <nodeName>; </span> |
| <span class="line">privileges:= string (COMMA string)* </span> |
| <span class="line">userName:=identifier </span> |
| <span class="line">nodeName:=identifier (DOT identifier)*</span> |
| <span class="line">Eg: IoTDB > REVOKE USER tempuser PRIVILEGES DELETE_TIMESERIES on root.ln;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Revoke Role Privileges</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">REVOKE ROLE <roleName> PRIVILEGES <privileges> ON <nodeName>; </span> |
| <span class="line">privileges:= string (COMMA string)* </span> |
| <span class="line">roleName:= identifier </span> |
| <span class="line">nodeName:=identifier (DOT identifier)*</span> |
| <span class="line">Eg: IoTDB > REVOKE ROLE temprole PRIVILEGES DELETE_TIMESERIES ON root.ln;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Revoke Role From User</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">REVOKE <roleName> FROM <userName>;</span> |
| <span class="line">roleName:=identifier</span> |
| <span class="line">userName:=identifier</span> |
| <span class="line">Eg: IoTDB > REVOKE temprole FROM tempuser;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Users</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST USER</span> |
| <span class="line">Eg: IoTDB > LIST USER</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Roles</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST ROLE</span> |
| <span class="line">Eg: IoTDB > LIST ROLE</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Privileges</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST PRIVILEGES USER <username> ON <path>; </span> |
| <span class="line">username:=identifier </span> |
| <span class="line">path=‘root’ (DOT identifier)*</span> |
| <span class="line">Eg: IoTDB > LIST PRIVILEGES USER sgcc_wirte_user ON root.sgcc;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Privileges of Roles</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST ROLE PRIVILEGES <roleName></span> |
| <span class="line">roleName:=identifier</span> |
| <span class="line">Eg: IoTDB > LIST ROLE PRIVILEGES actor;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Privileges of Roles(On Specific Path)</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST PRIVILEGES ROLE <roleName> ON <path>; </span> |
| <span class="line">roleName:=identifier </span> |
| <span class="line">path=‘root’ (DOT identifier)*</span> |
| <span class="line">Eg: IoTDB > LIST PRIVILEGES ROLE wirte_role ON root.sgcc;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Privileges of Users</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST USER PRIVILEGES <username> ; </span> |
| <span class="line">username:=identifier </span> |
| <span class="line">Eg: IoTDB > LIST USER PRIVILEGES tempuser;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Roles of Users</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST ALL ROLE OF USER <username> ; </span> |
| <span class="line">username:=identifier</span> |
| <span class="line">Eg: IoTDB > LIST ALL ROLE OF USER tempuser;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>List Users of Role</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">LIST ALL USER OF ROLE <roleName>;</span> |
| <span class="line">roleName:=identifier</span> |
| <span class="line">Eg: IoTDB > LIST ALL USER OF ROLE roleuser;</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Alter Password</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">ALTER USER <username> SET PASSWORD <password>;</span> |
| <span class="line">roleName:=identifier</span> |
| <span class="line">password:=identifier</span> |
| <span class="line">Eg: IoTDB > ALTER USER tempuser SET PASSWORD 'newpwd';</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="functions" tabindex="-1"><a class="header-anchor" href="#functions"><span>Functions</span></a></h2><ul><li>COUNT</li></ul><p>The COUNT function returns the value number of timeseries(one or more) non-null values selected by the SELECT statement. The result is a signed 64-bit integer. If there are no matching rows, COUNT () returns 0.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT COUNT(Path) (COMMA COUNT(Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>FIRST_VALUE(Rename from <code>FIRST</code> at <code>V0.10.0</code>)</li></ul><p>The FIRST_VALUE function returns the first point value of the choosen timeseries(one or more).</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT FIRST_VALUE (Path) (COMMA FIRST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT FIRST_VALUE (status), FIRST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>LAST_VALUE</li></ul><p>The LAST_VALUE function returns the last point value of the choosen timeseries(one or more).</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT LAST_VALUE (Path) (COMMA LAST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT LAST_VALUE (status), LAST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>MAX_TIME</li></ul><p>The MAX_TIME function returns the maximum timestamp of the choosen timeseries(one or more). The result is a signed 64-bit integer, greater than 0.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT MAX_TIME (Path) (COMMA MAX_TIME (Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT MAX_TIME(status), MAX_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>MAX_VALUE</li></ul><p>The MAX_VALUE function returns the maximum value(lexicographically ordered) of the choosen timeseries (one or more).</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT MAX_VALUE (Path) (COMMA MAX_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT MAX_VALUE(status), MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>EXTREME</li></ul><p>The EXTREME function returns the extreme value(lexicographically ordered) of the choosen timeseries (one or more).<br> extreme value: The value that has the maximum absolute value.<br> If the maximum absolute value of a positive value and a negative value is equal, return the positive value.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT EXTREME (Path) (COMMA EXT (Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT EXTREME(status), EXTREME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>AVG(Rename from <code>MEAN</code> at <code>V0.9.0</code>)</li></ul><p>The AVG function returns the arithmetic mean value of the choosen timeseries over a specified period of time. The timeseries must be int32, int64, float, double type, and the other types are not to be calculated. The result is a double type number.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT AVG (Path) (COMMA AVG (Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT AVG (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>MIN_TIME</li></ul><p>The MIN_TIME function returns the minimum timestamp of the choosen timeseries(one or more). The result is a signed 64-bit integer, greater than 0.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT MIN_TIME (Path) (COMMA MIN_TIME (Path))*FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT MIN_TIME(status), MIN_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>MIN_VALUE</li></ul><p>The MIN_VALUE function returns the minimum value(lexicographically ordered) of the choosen timeseries (one or more).</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT MIN_VALUE (Path) (COMMA MIN_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT MIN_VALUE(status),MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>NOW</li></ul><p>The NOW function returns the current timestamp. This function can be used in the data operation statement to represent time. The result is a signed 64-bit integer, greater than 0.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">NOW()</span> |
| <span class="line">Eg. INSERT INTO root.ln.wf01.wt01(timestamp,status) VALUES(NOW(), false)</span> |
| <span class="line">Eg. DELETE FROM root.ln.wf01.wt01.status, root.ln.wf01.wt01.temperature WHERE time < NOW()</span> |
| <span class="line">Eg. SELECT * FROM root WHERE time < NOW()</span> |
| <span class="line">Eg. SELECT COUNT(temperature) FROM root.ln.wf01.wt01 WHERE time < NOW()</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>SUM</li></ul><p>The SUM function returns the sum of the choosen timeseries (one or more) over a specified period of time. The timeseries must be int32, int64, float, double type, and the other types are not to be calculated. The result is a double type number.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SELECT SUM(Path) (COMMA SUM(Path))* FROM <FromClause> [WHERE <WhereClause>]?</span> |
| <span class="line">Eg. SELECT SUM(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24</span> |
| <span class="line">Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="ttl" tabindex="-1"><a class="header-anchor" href="#ttl"><span>TTL</span></a></h2><p>IoTDB supports storage-level TTL settings, which means it is able to delete old data<br> automatically and periodically. The benefit of using TTL is that hopefully you can control the<br> total disk space usage and prevent the machine from running out of disks. Moreover, the query<br> performance may downgrade as the total number of files goes up and the memory usage also increase<br> as there are more files. Timely removing such files helps to keep at a high query performance<br> level and reduce memory usage. The TTL operations in IoTDB are supported by the following three<br> statements:</p><ul><li>Set TTL</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SET TTL TO StorageGroupName TTLTime</span> |
| <span class="line">Eg. SET TTL TO root.group1 3600000</span> |
| <span class="line">This example means that for data in root.group1, only that of the latest 1 hour will remain, the</span> |
| <span class="line">older one is removed or made invisible. </span> |
| <span class="line">Note: TTLTime should be millisecond timestamp. When TTL is set, insertions that fall</span> |
| <span class="line">out of TTL will be rejected.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Unset TTL</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">UNSET TTL TO StorageGroupName</span> |
| <span class="line">Eg. UNSET TTL TO root.group1</span> |
| <span class="line">This example means that data of all time will be accepted in this group. </span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show TTL</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW ALL TTL</span> |
| <span class="line">SHOW TTL ON StorageGroupNames</span> |
| <span class="line">Eg.1 SHOW ALL TTL</span> |
| <span class="line">This example will show TTLs of all storage groups.</span> |
| <span class="line">Eg.2 SHOW TTL ON root.group1,root.group2,root.group3</span> |
| <span class="line">This example will show TTLs of the specified 3 groups.</span> |
| <span class="line">Notice: storage groups without TTL will show a "null"</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Notice: When you set TTL to some storage groups, data out of the TTL will be made invisible<br> immediately, but because the data files may contain both out-dated and living data or the data files may<br> be being used by queries, the physical removal of data is stale. If you increase or unset TTL<br> just after setting it previously, some previously invisible data may be seen again, but the<br> physically removed one is lost forever. In other words, different from delete statement, the<br> atomicity of data deletion is not guaranteed for efficiency concerns. So we recommend that you do<br> not change the TTL once it is set or at least do not reset it frequently, unless you are determined<br> to suffer the unpredictability.</p><ul><li>Delete Partition (experimental)</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">DELETE PARTITION StorageGroupName INT(COMMA INT)*</span> |
| <span class="line">Eg DELETE PARTITION root.sg1 0,1,2</span> |
| <span class="line">This example will delete the first 3 time partitions of storage group root.sg1.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>The partitionId can be found in data folders or converted using <code>timestamp / partitionInterval</code>.</p><h2 id="kill-query" tabindex="-1"><a class="header-anchor" href="#kill-query"><span>Kill query</span></a></h2><ul><li>Show the list of queries in progress</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">SHOW QUERY PROCESSLIST</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>Kill query</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">KILL QUERY INT?</span> |
| <span class="line">E.g. KILL QUERY</span> |
| <span class="line">E.g. KILL QUERY 2</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="set-system-to-readonly-writable" tabindex="-1"><a class="header-anchor" href="#set-system-to-readonly-writable"><span>SET SYSTEM TO READONLY / WRITABLE</span></a></h2><p>Set IoTDB system to read-only or writable mode.</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">IoTDB> SET SYSTEM TO READONLY</span> |
| <span class="line">IoTDB> SET SYSTEM TO WRITABLE</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="identifiers" tabindex="-1"><a class="header-anchor" href="#identifiers"><span>Identifiers</span></a></h2><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">QUOTE := '\\'';</span> |
| <span class="line">DOT := '.';</span> |
| <span class="line">COLON : ':' ;</span> |
| <span class="line">COMMA := ',' ;</span> |
| <span class="line">SEMICOLON := ';' ;</span> |
| <span class="line">LPAREN := '(' ;</span> |
| <span class="line">RPAREN := ')' ;</span> |
| <span class="line">LBRACKET := '[';</span> |
| <span class="line">RBRACKET := ']';</span> |
| <span class="line">EQUAL := '=' | '==';</span> |
| <span class="line">NOTEQUAL := '<>' | '!=';</span> |
| <span class="line">LESSTHANOREQUALTO := '<=';</span> |
| <span class="line">LESSTHAN := '<';</span> |
| <span class="line">GREATERTHANOREQUALTO := '>=';</span> |
| <span class="line">GREATERTHAN := '>';</span> |
| <span class="line">DIVIDE := '/';</span> |
| <span class="line">PLUS := '+';</span> |
| <span class="line">MINUS := '-';</span> |
| <span class="line">STAR := '*';</span> |
| <span class="line">Letter := 'a'..'z' | 'A'..'Z';</span> |
| <span class="line">HexDigit := 'a'..'f' | 'A'..'F';</span> |
| <span class="line">Digit := '0'..'9';</span> |
| <span class="line">Boolean := TRUE | FALSE | 0 | 1 (case insensitive)</span> |
| <span class="line"></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">StringLiteral := ( '\\'' ( ~('\\'') )* '\\'';</span> |
| <span class="line">eg. 'abc'</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">Integer := ('-' | '+')? Digit+;</span> |
| <span class="line">eg. 123</span> |
| <span class="line">eg. -222</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">Float := ('-' | '+')? Digit+ DOT Digit+ (('e' | 'E') ('-' | '+')? Digit+)?;</span> |
| <span class="line">eg. 3.1415</span> |
| <span class="line">eg. 1.2E10</span> |
| <span class="line">eg. -1.33</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">Identifier := (Letter | '_') (Letter | Digit | '_' | MINUS)*;</span> |
| <span class="line">eg. a123</span> |
| <span class="line">eg. _abc123</span> |
| <span class="line"></span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="literals" tabindex="-1"><a class="header-anchor" href="#literals"><span>Literals</span></a></h2><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">PointValue : Integer | Float | StringLiteral | Boolean</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">TimeValue : Integer | DateTime | ISO8601 | NOW()</span> |
| <span class="line">Note: Integer means timestamp type.</span> |
| <span class="line"></span> |
| <span class="line">DateTime : </span> |
| <span class="line">eg. 2016-11-16T16:22:33+08:00</span> |
| <span class="line">eg. 2016-11-16 16:22:33+08:00</span> |
| <span class="line">eg. 2016-11-16T16:22:33.000+08:00</span> |
| <span class="line">eg. 2016-11-16 16:22:33.000+08:00</span> |
| <span class="line">Note: DateTime Type can support several types, see Chapter 3 Datetime section for details.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">PrecedenceEqualOperator : EQUAL | NOTEQUAL | LESSTHANOREQUALTO | LESSTHAN | GREATERTHANOREQUALTO | GREATERTHAN</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">Timeseries : ROOT [DOT \\<LayerName\\>]* DOT \\<SensorName\\></span> |
| <span class="line">LayerName : Identifier</span> |
| <span class="line">SensorName : Identifier</span> |
| <span class="line">eg. root.ln.wf01.wt01.status</span> |
| <span class="line">eg. root.sgcc.wf03.wt01.temperature</span> |
| <span class="line">Note: Timeseries must be start with \`root\`(case insensitive) and end with sensor name.</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">PrefixPath : ROOT (DOT \\<LayerName\\>)*</span> |
| <span class="line">LayerName : Identifier | STAR</span> |
| <span class="line">eg. root.sgcc</span> |
| <span class="line">eg. root.*</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text" data-title="text"><pre><code><span class="line">Path: (ROOT | <LayerName>) (DOT <LayerName>)* </span> |
| <span class="line">LayerName: Identifier | STAR</span> |
| <span class="line">eg. root.ln.wf01.wt01.status</span> |
| <span class="line">eg. root.*.wf01.wt01.status</span> |
| <span class="line">eg. root.ln.wf01.wt01.*</span> |
| <span class="line">eg. *.wt01.*</span> |
| <span class="line">eg. *</span> |
| <span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,198)]))}const c=s(l,[["render",t],["__file","SQL-Reference.html.vue"]]),p=JSON.parse(`{"path":"/UserGuide/V0.13.x/Reference/SQL-Reference.html","title":"SQL Reference","lang":"en-US","frontmatter":{"description":"SQL Reference In this part, we will introduce you IoTDB's Query Language. IoTDB offers you a SQL-like query language for interacting with IoTDB, the query language can be devide...","head":[["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://iotdb.apache.org/zh/UserGuide/V0.13.x/Reference/SQL-Reference.html"}],["meta",{"property":"og:url","content":"https://iotdb.apache.org/UserGuide/V0.13.x/Reference/SQL-Reference.html"}],["meta",{"property":"og:site_name","content":"IoTDB Website"}],["meta",{"property":"og:title","content":"SQL Reference"}],["meta",{"property":"og:description","content":"SQL Reference In this part, we will introduce you IoTDB's Query Language. IoTDB offers you a SQL-like query language for interacting with IoTDB, the query language can be devide..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2023-11-07T08:05:06.000Z"}],["meta",{"property":"article:modified_time","content":"2023-11-07T08:05:06.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"SQL Reference\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2023-11-07T08:05:06.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"Show Version","slug":"show-version","link":"#show-version","children":[]},{"level":2,"title":"Schema Statement","slug":"schema-statement","link":"#schema-statement","children":[]},{"level":2,"title":"Data Management Statement","slug":"data-management-statement","link":"#data-management-statement","children":[]},{"level":2,"title":"Database Management Statement","slug":"database-management-statement","link":"#database-management-statement","children":[]},{"level":2,"title":"Functions","slug":"functions","link":"#functions","children":[]},{"level":2,"title":"TTL","slug":"ttl","link":"#ttl","children":[]},{"level":2,"title":"Kill query","slug":"kill-query","link":"#kill-query","children":[]},{"level":2,"title":"SET SYSTEM TO READONLY / WRITABLE","slug":"set-system-to-readonly-writable","link":"#set-system-to-readonly-writable","children":[]},{"level":2,"title":"Identifiers","slug":"identifiers","link":"#identifiers","children":[]},{"level":2,"title":"Literals","slug":"literals","link":"#literals","children":[]}],"git":{"createdTime":1688958677000,"updatedTime":1699344306000,"contributors":[{"name":"CritasWang","email":"critas@outlook.com","commits":1},{"name":"Itami Sho","email":"42286868+MiniSho@users.noreply.github.com","commits":1}]},"readingTime":{"minutes":21.04,"words":6311},"filePathRelative":"UserGuide/V0.13.x/Reference/SQL-Reference.md","localizedDate":"July 10, 2023","autoDesc":true}`);export{c as comp,p as data}; |