SQL 參考文檔
顯示版本號
show version+---------------+
| version|
+---------------+
|0.13.0-SNAPSHOT|
+---------------+
Total line number = 1
It costs 0.417sSchema 語句
- 設置存儲組
SET STORAGE GROUP TO <FullPath>
Eg: IoTDB > SET STORAGE GROUP TO root.ln.wf01.wt01
Note: FullPath can not include wildcard `*` or `**`- 刪除存儲組
DELETE STORAGE GROUP <PathPattern> [COMMA <PathPattern>]*
Eg: IoTDB > DELETE STORAGE GROUP root.ln
Eg: IoTDB > DELETE STORAGE GROUP root.*
Eg: IoTDB > DELETE STORAGE GROUP root.**- 創建時間序列語句
CREATE TIMESERIES <FullPath> WITH <AttributeClauses>
alias
: LR_BRACKET ID RR_BRACKET
;
attributeClauses
: DATATYPE OPERATOR_EQ <DataTypeValue>
COMMA ENCODING OPERATOR_EQ <EncodingValue>
(COMMA (COMPRESSOR | COMPRESSION) OPERATOR_EQ <CompressorValue>)?
(COMMA property)*
tagClause
attributeClause
;
attributeClause
: ATTRIBUTES LR_BRACKET propertyClause (COMMA propertyClause)* RR_BRACKET
;
tagClause
: TAGS LR_BRACKET propertyClause (COMMA propertyClause)* RR_BRACKET
;
propertyClause
: name=ID OPERATOR_EQ propertyValue
;
DataTypeValue: BOOLEAN | DOUBLE | FLOAT | INT32 | INT64 | TEXT
EncodingValue: GORILLA | PLAIN | RLE | TS_2DIFF | REGULAR
CompressorValue: UNCOMPRESSED | SNAPPY
AttributesType: SDT | COMPDEV | COMPMINTIME | COMPMAXTIME
PropertyValue: ID | constant
Eg: CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, COMPRESSOR=SNAPPY, MAX_POINT_NUMBER=3
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)
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, LOSS=SDT, COMPDEV=0.01
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, LOSS=SDT, COMPDEV=0.01, COMPMINTIME=3
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, LOSS=SDT, COMPDEV=0.01, COMPMINTIME=2, COMPMAXTIME=15
Note: Datatype and encoding type must be corresponding. Please check Chapter 3 Encoding Section for details.
Note: When propertyValue is SDT, it is required to set compression deviation COMPDEV, which is the maximum absolute difference between values.
Note: For SDT, values withtin COMPDEV will be discarded.
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.
Note: For SDT, it is optional to set compression maximum COMPMAXTIME, which is the maximum time difference between stored values regardless of COMPDEV.- 創建時間序列語句(簡化版本,從v0.13起支持)
CREATE TIMESERIES <FullPath> <SimplifiedAttributeClauses>
SimplifiedAttributeClauses
: WITH? (DATATYPE OPERATOR_EQ)? <DataTypeValue>
ENCODING OPERATOR_EQ <EncodingValue>
((COMPRESSOR | COMPRESSION) OPERATOR_EQ <CompressorValue>)?
(COMMA property)*
tagClause
attributeClause
;
Eg: CREATE TIMESERIES root.ln.wf01.wt01.status BOOLEAN ENCODING=PLAIN
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE COMPRESSOR=SNAPPY MAX_POINT_NUMBER=3
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)
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE LOSS=SDT COMPDEV=0.01
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE LOSS=SDT COMPDEV=0.01 COMPMINTIME=3
Eg: CREATE TIMESERIES root.ln.wf01.wt01.temperature FLOAT ENCODING=RLE LOSS=SDT COMPDEV=0.01 COMPMINTIME=2 COMPMAXTIME=15- 創建對齊時間序列語句
CREATE ALIGNED TIMESERIES <FullPath> alignedMeasurements
alignedMeasurements
: LR_BRACKET nodeNameWithoutWildcard attributeClauses
(COMMA nodeNameWithoutWildcard attributeClauses)+ RR_BRACKET
;
Eg: CREATE ALIGNED TIMESERIES root.ln.wf01.GPS(lat FLOAT ENCODING=GORILLA, lon FLOAT ENCODING=GORILLA COMPRESSOR=SNAPPY)
Note: It is not supported to set different compression for a group of aligned timeseries.
Note: It is not currently supported to set an alias, tag, and attribute for aligned timeseries.- 創建元數據模板語句
CREATE SCHEMA TEMPLATE <TemplateName> LR_BRACKET <TemplateMeasurementClause> (COMMA plateMeasurementClause>)* RR_BRACKET
templateMeasurementClause
: suffixPath attributeClauses #nonAlignedTemplateMeasurement
| suffixPath LR_BRACKET nodeNameWithoutWildcard attributeClauses
(COMMA nodeNameWithoutWildcard attributeClauses)+ RR_BRACKET #alignedTemplateMeasurement
;
Eg: CREATE SCHEMA TEMPLATE temp1(
s1 INT32 encoding=Gorilla, compression=SNAPPY,
vector1(
s1 INT32 encoding=Gorilla,
s2 FLOAT encoding=RLE, compression=SNAPPY)
)- 掛載元數據模板語句
SET SCHEMA TEMPLATE <TemplateName> TO <PrefixPath>
Eg: SET SCHEMA TEMPLATE temp1 TO root.beijing- 根據元數據模板創建時間序列語句
CREATE TIMESERIES OF SCHEMA TEMPLATE ON <PrefixPath>
Eg: CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.beijing- 卸載元數據模板語句
UNSET SCHEMA TEMPLATE <TemplateName> FROM <PrefixPath>
Eg: UNSET SCHEMA TEMPLATE temp1 FROM root.beijing- 刪除時間序列語句
DELETE TIMESERIES <PathPattern> [COMMA <PathPattern>]*
Eg: IoTDB > DELETE TIMESERIES root.ln.wf01.wt01.status
Eg: IoTDB > DELETE TIMESERIES root.ln.wf01.wt01.status, root.ln.wf01.wt01.temperature
Eg: IoTDB > DELETE TIMESERIES root.ln.wf01.wt01.*- 修改時間序列標簽屬性語句
ALTER TIMESERIES fullPath alterClause
alterClause
: RENAME beforeName=ID TO currentName=ID
| SET property (COMMA property)*
| DROP ID (COMMA ID)*
| ADD TAGS property (COMMA property)*
| ADD ATTRIBUTES property (COMMA property)*
| UPSERT tagClause attributeClause
;
attributeClause
: (ATTRIBUTES LR_BRACKET property (COMMA property)* RR_BRACKET)?
;
tagClause
: (TAGS LR_BRACKET property (COMMA property)* RR_BRACKET)?
;
Eg: ALTER timeseries root.turbine.d1.s1 RENAME tag1 TO newTag1
Eg: ALTER timeseries root.turbine.d1.s1 SET tag1=newV1, attr1=newV1
Eg: ALTER timeseries root.turbine.d1.s1 DROP tag1, tag2
Eg: ALTER timeseries root.turbine.d1.s1 ADD TAGS tag3=v3, tag4=v4
Eg: ALTER timeseries root.turbine.d1.s1 ADD ATTRIBUTES attr3=v3, attr4=v4
EG: ALTER timeseries root.turbine.d1.s1 UPSERT TAGS(tag2=newV2, tag3=v3) ATTRIBUTES(attr3=v3, attr4=v4)- 顯示所有時間序列語句
SHOW TIMESERIES
Eg: IoTDB > SHOW TIMESERIES
Note: This statement can only be used in IoTDB Client. If you need to show all timeseries in JDBC, please use `DataBaseMetadata` interface.- 顯示特定時間序列語句
SHOW TIMESERIES <Path>
Eg: IoTDB > SHOW TIMESERIES root.**
Eg: IoTDB > SHOW TIMESERIES root.ln.**
Eg: IoTDB > SHOW TIMESERIES root.ln.*.*.status
Eg: IoTDB > SHOW TIMESERIES root.ln.wf01.wt01.status
Note: The path can be timeseries path or path pattern
Note: This statement can be used in IoTDB Client and JDBC.- 顯示滿足條件的時間序列語句
SHOW TIMESERIES pathPattern? showWhereClause?
showWhereClause
: WHERE (property | containsExpression)
;
containsExpression
: name=ID OPERATOR_CONTAINS value=propertyValue
;
Eg: show timeseries root.ln.** where unit='c'
Eg: show timeseries root.ln.** where description contains 'test1'- 分頁顯示滿足條件的時間序列語句
SHOW TIMESERIES pathPattern? showWhereClause? limitClause?
showWhereClause
: WHERE (property | containsExpression)
;
containsExpression
: name=ID OPERATOR_CONTAINS value=propertyValue
;
limitClause
: LIMIT INT offsetClause?
| offsetClause? LIMIT INT
;
Eg: show timeseries root.ln.** where unit='c'
Eg: show timeseries root.ln.** where description contains 'test1'
Eg: show timeseries root.ln.** where unit='c' limit 10 offset 10- 顯示存儲組語句
SHOW STORAGE GROUP
Eg: IoTDB > SHOW STORAGE GROUP
Note: This statement can be used in IoTDB Client and JDBC.- 顯示特定存儲組語句
SHOW STORAGE GROUP <PathPattern>
Eg: IoTDB > SHOW STORAGE GROUP root.*
Eg: IoTDB > SHOW STORAGE GROUP root.**
Eg: IoTDB > SHOW STORAGE GROUP root.ln
Note: This statement can be used in IoTDB Client and JDBC.- 顯示 Merge 狀態語句
SHOW MERGE INFO
Eg: IoTDB > SHOW MERGE INFO
Note: This statement can be used in IoTDB Client and JDBC.- 顯示指定路徑下時間序列數語句
COUNT TIMESERIES <Path>
Eg: IoTDB > COUNT TIMESERIES root.**
Eg: IoTDB > COUNT TIMESERIES root.ln.**
Eg: IoTDB > COUNT TIMESERIES root.ln.*.*.status
Eg: IoTDB > COUNT TIMESERIES root.ln.wf01.wt01.status
Note: The path can be timeseries path or path pattern.
Note: This statement can be used in IoTDB Client and JDBC.COUNT TIMESERIES <Path> GROUP BY LEVEL=<INTEGER>
Eg: IoTDB > COUNT TIMESERIES root.** GROUP BY LEVEL=1
Eg: IoTDB > COUNT TIMESERIES root.ln.** GROUP BY LEVEL=2
Eg: IoTDB > COUNT TIMESERIES root.ln.wf01.* GROUP BY LEVEL=3
Note: The path can be timeseries path or path pattern.
Note: This statement can be used in IoTDB Client and JDBC.- 顯示指定路徑下特定層級的節點數語句
COUNT NODES <Path> LEVEL=<INTEGER>
Eg: IoTDB > COUNT NODES root.** LEVEL=2
Eg: IoTDB > COUNT NODES root.ln.** LEVEL=2
Eg: IoTDB > COUNT NODES root.ln.*.* LEVEL=3
Eg: IoTDB > COUNT NODES root.ln.wf01.* LEVEL=3
Note: The path can be timeseries path or path pattern.
Note: This statement can be used in IoTDB Client and JDBC.- 顯示所有設備語句
SHOW DEVICES (WITH STORAGE GROUP)? limitClause?
Eg: IoTDB > SHOW DEVICES
Eg: IoTDB > SHOW DEVICES WITH STORAGE GROUP
Note: This statement can be used in IoTDB Client and JDBC.- 顯示特定設備語句
SHOW DEVICES <PathPattern> (WITH STORAGE GROUP)? limitClause?
Eg: IoTDB > SHOW DEVICES root.**
Eg: IoTDB > SHOW DEVICES root.ln.*
Eg: IoTDB > SHOW DEVICES root.*.wf01
Eg: IoTDB > SHOW DEVICES root.ln.* WITH STORAGE GROUP
Eg: IoTDB > SHOW DEVICES root.*.wf01 WITH STORAGE GROUP
Note: The path can be path pattern.
Note: This statement can be used in IoTDB Client and JDBC.- 顯示 ROOT 節點的子節點名稱語句
SHOW CHILD PATHS
Eg: IoTDB > SHOW CHILD PATHS
Note: This statement can be used in IoTDB Client and JDBC.- 顯示子節點名稱語句
SHOW CHILD PATHS <PathPattern>
Eg: IoTDB > SHOW CHILD PATHS root
Eg: IoTDB > SHOW CHILD PATHS root.ln
Eg: IoTDB > SHOW CHILD PATHS root.*.wf01
Eg: IoTDB > SHOW CHILD PATHS root.ln.wf*
Note: This statement can be used in IoTDB Client and JDBC.- 為 schema 創建快照
CREATE SNAPSHOT FOR SCHEMA數據管理語句
- 插入記錄語句
INSERT INTO <PrefixPath> LPAREN TIMESTAMP COMMA <Sensor> [COMMA <Sensor>]* RPAREN VALUES LPAREN <TimeValue>, <PointValue> [COMMA <PointValue>]* RPAREN
Sensor : Identifier
Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,status) values(1509465600000,true)
Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,status) VALUES(NOW(), false)
Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,temperature) VALUES(2017-11-01T00:17:00.000+08:00,24.22028)
Eg: IoTDB > INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) VALUES (1509466680000,false,20.060787)
Eg: IoTDB > INSERT INTO root.sg.d1(timestamp,(s1,s2),(s3,s4)) VALUES (1509466680000,(1.0,2),(NULL,4))
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>
Note: The order of Sensor and PointValue need one-to-one correspondence- 刪除記錄語句
DELETE FROM <PathPattern> [COMMA <PathPattern>]* [WHERE <WhereClause>]?
WhereClause : <Condition> [(AND) <Condition>]*
Condition : <TimeExpr> [(AND) <TimeExpr>]*
TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)
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
Eg: DELETE FROM root.ln.wf01.wt01.status, root.ln.wf01.wt01.temperature WHERE time < NOW()
Eg: DELETE FROM root.ln.wf01.wt01.* WHERE time >= 1509466140000- 選擇記錄語句
SELECT <SelectClause> FROM <FromClause> [WHERE <WhereClause>]?
SelectClause : <SelectPath> (COMMA <SelectPath>)*
SelectPath : <FUNCTION> LPAREN <Path> RPAREN | <Path>
FUNCTION : ‘COUNT’ , ‘MIN_TIME’, ‘MAX_TIME’, ‘MIN_VALUE’, ‘MAX_VALUE’
FromClause : <PrefixPath> (COMMA <PrefixPath>)?
WhereClause : <Condition> [(AND | OR) <Condition>]*
Condition : <Expression> [(AND | OR) <Expression>]*
Expression : [NOT | !]? <TimeExpr> | [NOT | !]? <SensorExpr>
TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)
RelativeTimeDurationUnit = Integer ('Y'|'MO'|'W'|'D'|'H'|'M'|'S'|'MS'|'US'|'NS')
RelativeTime : (now() | <TimeValue>) [(+|-) RelativeTimeDurationUnit]+
SensorExpr : (<Timeseries> | <Path>) PrecedenceEqualOperator <PointValue>
Eg: IoTDB > SELECT status, temperature FROM root.ln.wf01.wt01 WHERE temperature < 24 and time > 2017-11-01 00:13:00
Eg. IoTDB > SELECT ** FROM root
Eg. IoTDB > SELECT * FROM root.**
Eg. IoTDB > SELECT * FROM root.** where time > now() - 5m
Eg. IoTDB > SELECT * FROM root.ln.*.wf*
Eg. IoTDB > SELECT COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25
Eg. IoTDB > SELECT MIN_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25
Eg. IoTDB > SELECT MAX_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature > 24
Eg. IoTDB > SELECT MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature > 23
Eg. IoTDB > SELECT MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25
Eg. IoTDB > SELECT COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 25 GROUP BY LEVEL=1
Note: the statement needs to satisfy this constraint: <Path>(SelectClause) + <PrefixPath>(FromClause) = <Timeseries>
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>
Note: In Version 0.7.0, if <WhereClause> includes `OR`, time filter can not be used.
Note: There must be a space on both sides of the plus and minus operator appearing in the time expression- Group By 語句
SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> GROUP BY <GroupByTimeClause>
SelectClause : <Function> [COMMA < Function >]*
Function : <AggregationFunction> LPAREN <Path> RPAREN
FromClause : <PrefixPath>
WhereClause : <Condition> [(AND | OR) <Condition>]*
Condition : <Expression> [(AND | OR) <Expression>]*
Expression : [NOT | !]? <TimeExpr> | [NOT | !]? <SensorExpr>
TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)
RelativeTimeDurationUnit = Integer ('Y'|'MO'|'W'|'D'|'H'|'M'|'S'|'MS'|'US'|'NS')
RelativeTime : (now() | <TimeValue>) [(+|-) RelativeTimeDurationUnit]+
SensorExpr : (<Timeseries> | <Path>) PrecedenceEqualOperator <PointValue>
GroupByTimeClause : LPAREN <TimeInterval> COMMA <TimeUnit> (COMMA <TimeUnit>)? RPAREN
TimeInterval: LSBRACKET <TimeValue> COMMA <TimeValue> RRBRACKET | LRBRACKET <TimeValue> COMMA <TimeValue> RSBRACKET
TimeUnit : Integer <DurationUnit>
DurationUnit : "ms" | "s" | "m" | "h" | "d" | "w" | "mo"
Eg: SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 where temperature < 24 GROUP BY([1509465720000, 1509466380000), 5m)
Eg: SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 where temperature < 24 GROUP BY((1509465720000, 1509466380000], 5m)
Eg. SELECT COUNT (status), MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE time < 1509466500000 GROUP BY([1509465720000, 1509466380000), 5m, 10m)
Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ([1509466140000, 1509466380000), 3m, 5ms)
Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 3m, 5ms)
Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 1mo)
Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 1mo, 1mo)
Eg. SELECT MIN_TIME(status), MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE temperature < 25 GROUP BY ((1509466140000, 1509466380000], 1mo, 2mo)
Note: the statement needs to satisfy this constraint: <Path>(SelectClause) + <PrefixPath>(FromClause) = <Timeseries>
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>
Note: <TimeValue>(TimeInterval) needs to be greater than 0
Note: First <TimeValue>(TimeInterval) in needs to be smaller than second <TimeValue>(TimeInterval)
Note: <TimeUnit> needs to be greater than 0
Note: Third <TimeUnit> if set shouldn't be smaller than second <TimeUnit>
Note: If the second <DurationUnit> is "mo", the third <DurationUnit> need to be in month
Note: If the third <DurationUnit> is "mo", the second <DurationUnit> can be in any unit- Fill 語句
SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> FILL <FillClause>
SelectClause : <Path> [COMMA <Path>]*
FromClause : < PrefixPath > [COMMA < PrefixPath >]*
WhereClause : <WhereExpression>
WhereExpression : TIME EQUAL <TimeValue>
FillClause : LPAREN <TypeClause> [COMMA <TypeClause>]* RPAREN
TypeClause : <Int32Clause> | <Int64Clause> | <FloatClause> | <DoubleClause> | <BoolClause> | <TextClause>
Int32Clause: INT32 LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET
Int64Clause: INT64 LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET
FloatClause: FLOAT LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET
DoubleClause: DOUBLE LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET
BoolClause: BOOLEAN LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET
TextClause: TEXT LBRACKET (<LinearClause> | <PreviousClause>) RBRACKET
PreviousClause : PREVIOUS [COMMA <ValidPreviousTime>]?
LinearClause : LINEAR [COMMA <ValidPreviousTime> COMMA <ValidBehindTime>]?
ValidPreviousTime, ValidBehindTime: <TimeUnit>
TimeUnit : Integer <DurationUnit>
DurationUnit : "ms" | "s" | "m" | "h" | "d" | "w"
Eg: SELECT temperature FROM root.ln.wf01.wt01 WHERE time = 2017-11-01T16:37:50.000 FILL(float[previous, 1m])
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])
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])
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])
Note: the statement needs to satisfy this constraint: <PrefixPath>(FromClause) + <Path>(SelectClause) = <Timeseries>
Note: Integer in <TimeUnit> needs to be greater than 0- Group By Fill 語句
# time 區間規則為:只能為左開右閉或左閉右開,例如:[20, 100)
SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> GROUP BY <GroupByClause> (FILL <GROUPBYFillClause>)?
GroupByClause : LPAREN <TimeInterval> COMMA <TimeUnit> RPAREN
GROUPBYFillClause : LPAREN <TypeClause> RPAREN
TypeClause : <AllClause> | <Int32Clause> | <Int64Clause> | <FloatClause> | <DoubleClause> | <BoolClause> | <TextClause>
AllClause: ALL LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET
Int32Clause: INT32 LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET
Int64Clause: INT64 LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET
FloatClause: FLOAT LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET
DoubleClause: DOUBLE LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET
BoolClause: BOOLEAN LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET
TextClause: TEXT LBRACKET (<PreviousUntilLastClause> | <PreviousClause>) RBRACKET
PreviousClause : PREVIOUS
PreviousUntilLastClause : PREVIOUSUNTILLAST
Eg: SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (float[PREVIOUS])
Eg: SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY((15, 100], 5m) FILL (float[PREVIOUS])
Eg: SELECT last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (int32[PREVIOUSUNTILLAST])
Eg: SELECT last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (int32[PREVIOUSUNTILLAST, 5m])
Eg: SELECT last_value(temperature), last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (ALL[PREVIOUS])
Eg: SELECT last_value(temperature), last_value(power) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (ALL[PREVIOUS, 5m])
Note: In group by fill, sliding step is not supported in group by clause
Note: Now, only last_value aggregation function is supported in group by fill.
Note: Linear fill is not supported in group by fill.- Order by time 語句
SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause> GROUP BY <GroupByClause> (FILL <GROUPBYFillClause>)? orderByTimeClause?
orderByTimeClause: order by time (asc | desc)?
Eg: SELECT last_value(temperature) FROM root.ln.wf01.wt01 GROUP BY([20, 100), 5m) FILL (float[PREVIOUS]) order by time desc
Eg: SELECT * from root.** order by time desc
Eg: SELECT * from root.** order by time desc align by device
Eg: SELECT * from root.** order by time desc disable align
Eg: SELECT last * from root order by time desc- Limit & SLimit 語句
SELECT <SelectClause> FROM <FromClause> [WHERE <WhereClause>] [<LIMITClause>] [<SLIMITClause>]
SelectClause : [<Path> | Function]+
Function : <AggregationFunction> LPAREN <Path> RPAREN
FromClause : <Path>
WhereClause : <Condition> [(AND | OR) <Condition>]*
Condition : <Expression> [(AND | OR) <Expression>]*
Expression: [NOT|!]?<TimeExpr> | [NOT|!]?<SensorExpr>
TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)
RelativeTimeDurationUnit = Integer ('Y'|'MO'|'W'|'D'|'H'|'M'|'S'|'MS'|'US'|'NS')
RelativeTime : (now() | <TimeValue>) [(+|-) RelativeTimeDurationUnit]+
SensorExpr : (<Timeseries>|<Path>) PrecedenceEqualOperator <PointValue>
LIMITClause : LIMIT <N> [OFFSETClause]?
N : Integer
OFFSETClause : OFFSET <OFFSETValue>
OFFSETValue : Integer
SLIMITClause : SLIMIT <SN> [SOFFSETClause]?
SN : Integer
SOFFSETClause : SOFFSET <SOFFSETValue>
SOFFSETValue : Integer
Eg: IoTDB > SELECT status, temperature FROM root.ln.wf01.wt01 WHERE temperature < 24 and time > 2017-11-01 00:13:00 LIMIT 3 OFFSET 2
Eg. IoTDB > SELECT COUNT (status), MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE time < 1509466500000 GROUP BY([1509465720000, 1509466380000), 5m) LIMIT 3
Note: N, OFFSETValue, SN and SOFFSETValue must be greater than 0.
Note: The order of <LIMITClause> and <SLIMITClause> does not affect the grammatical correctness.
Note: <FillClause> can not use <LIMITClause> but not <SLIMITClause>.- Align by device 語句
AlignbyDeviceClause : ALIGN BY DEVICE
規則:
1. 大小寫不敏感。
正例:select * from root.sg1.** align by device
正例:select * from root.sg1.** ALIGN BY DEVICE
2. AlignbyDeviceClause 只能放在末尾。
正例:select * from root.sg1.** where time > 10 align by device
錯例:select * from root.sg1.** align by device where time > 10
3. Select 子句中的 path 只能是單層,或者通配符,不允許有 path 分隔符"."。
正例:select s0,s1 from root.sg1.* align by device
正例:select s0,s1 from root.sg1.d0, root.sg1.d1 align by device
正例:select * from root.sg1.* align by device
正例:select * from root.** align by device
正例:select s0,s1,* from root.*.* align by device
錯例:select d0.s1, d0.s2, d1.s0 from root.sg1 align by device
錯例:select *.s0, *.s1 from root.* align by device
錯例:select *.*.* from root align by device
4. 相同 measurement 的各設備的數據類型必須都相同,
正例:select s0 from root.sg1.d0,root.sg1.d1 align by device
root.sg1.d0.s0 and root.sg1.d1.s0 are both INT32.
正例:select count(s0) from root.sg1.d0,root.sg1.d1 align by device
count(root.sg1.d0.s0) and count(root.sg1.d1.s0) are both INT64.
錯例:select s0 from root.sg1.d0, root.sg2.d3 align by device
root.sg1.d0.s0 is INT32 while root.sg2.d3.s0 is FLOAT.
5. 結果集的展示規則:對于 select 中給出的列,不論是否有數據(是否被注冊),均會被顯示。此外,select 子句中還支持常數列(例如,'a', '123'等等)。
例如,"select s0,s1,s2,'abc',s1,s2 from root.sg.d0, root.sg.d1, root.sg.d2 align by device". 假設只有下述三列有數據:
- root.sg.d0.s0
- root.sg.d0.s1
- root.sg.d1.s0
結果集形如:
| Time | Device | s0 | s1 | s2 | 'abc' | s1 | s2 |
| --- | --- | ---| ---| null | 'abc' | ---| null |
| 1 |root.sg.d0| 20 | 2.5| null | 'abc' | 2.5| null |
| 2 |root.sg.d0| 23 | 3.1| null | 'abc' | 3.1| null |
| ... | ... | ...| ...| null | 'abc' | ...| null |
| 1 |root.sg.d1| 12 |null| null | 'abc' |null| null |
| 2 |root.sg.d1| 19 |null| null | 'abc' |null| null |
| ... | ... | ...| ...| null | 'abc' | ...| null |
注意注意 設備'root.sg.d1'的's0'的值全為 null
6. 在 From 中重復寫設備名字或者設備前綴是沒有任何作用的。
例如,"select s0,s1 from root.sg.d0,root.sg.d0,root.sg.d1 align by device" 等于 "select s0,s1 from root.sg.d0,root.sg.d1 align by device".
例如。"select s0,s1 from root.sg.*,root.sg.d0 align by device" 等于 "select s0,s1 from root.sg.* align by device".
7. 在 Select 子句中重復寫列名是生效的。例如,"select s0,s0,s1 from root.sg.* align by device" 不等于 "select s0,s1 from root.sg.* align by device".
8. 在 Where 子句中時間過濾條件和值過濾條件均可以使用,值過濾條件可以使用葉子節點 path,或以 root 開頭的整個 path,不允許存在通配符。例如,
- select * from root.sg.* where time = 1 align by device
- select * from root.sg.* where s0 < 100 align by device
- select * from root.sg.* where time < 20 AND s0 > 50 align by device
- select * from root.sg.d0 where root.sg.d0.s0 = 15 align by device
9. 更多正例:
- select * from root.vehicle.* align by device
- select s0,s0,s1 from root.vehicle.* align by device
- select s0,s1 from root.vehicle.* limit 10 offset 1 align by device
- select * from root.vehicle.* slimit 10 soffset 2 align by device
- select * from root.vehicle.* where time > 10 align by device
- select * from root.vehicle.* where time < 10 AND s0 > 25 align by device
- select * from root.vehicle.* where root.vehicle.d0.s0>0 align by device
- select count(*) from root.vehicle.* align by device
- select sum(*) from root.vehicle.* GROUP BY (20ms,0,[2,50]) align by device
- select * from root.vehicle.* where time = 3 Fill(int32[previous, 5ms]) align by device- Disable align 語句
規則:
1. 大小寫均可。
正例:select * from root.sg1.* disable align
正例:select * from root.sg1.* DISABLE ALIGN
2. Disable Align 只能用于查詢語句句尾。
正例:select * from root.sg1.* where time > 10 disable align
錯例:select * from root.sg1.* disable align where time > 10
3. Disable Align 不能用于聚合查詢、Fill 語句、Group by 或 Group by device 語句,但可用于 Limit 語句。
正例:select * from root.sg1.* limit 3 offset 2 disable align
正例:select * from root.sg1.* slimit 3 soffset 2 disable align
錯例:select count(s0),count(s1) from root.sg1.d1 disable align
錯例:select * from root.vehicle.* where root.vehicle.d0.s0>0 disable align
錯例:select * from root.vehicle.* align by device disable align
4. 結果顯示若無數據顯示為空白。
查詢結果樣式如下表:
| Time | root.sg.d0.s1 | Time | root.sg.d0.s2 | Time | root.sg.d1.s1 |
| --- | --- | --- | --- | --- | --- |
| 1 | 100 | 20 | 300 | 400 | 600 |
| 2 | 300 | 40 | 800 | 700 | 900 |
| 4 | 500 | | | 800 | 1000 |
| | | | | 900 | 8000 |
5. 一些正確使用樣例:
- select * from root.vehicle.* disable align
- select s0,s0,s1 from root.vehicle.* disable align
- select s0,s1 from root.vehicle.* limit 10 offset 1 disable align
- select * from root.vehicle.* slimit 10 soffset 2 disable align
- select * from root.vehicle.* where time > 10 disable align- Last 語句
Last 語句返回所要查詢時間序列的最近時間戳的一條數據
SELECT LAST <SelectClause> FROM <FromClause> WHERE <WhereClause>
Select Clause : <Path> [COMMA <Path>]*
FromClause : < PrefixPath > [COMMA < PrefixPath >]*
WhereClause : <TimeExpr> [(AND | OR) <TimeExpr>]*
TimeExpr : TIME PrecedenceEqualOperator (<TimeValue> | <RelativeTime>)
Eg. SELECT LAST s1 FROM root.sg.d1
Eg. SELECT LAST s1, s2 FROM root.sg.d1
Eg. SELECT LAST s1 FROM root.sg.d1, root.sg.d2
Eg. SELECT LAST s1 FROM root.sg.d1 where time > 100
Eg. SELECT LAST s1, s2 FROM root.sg.d1 where time >= 500
規則:
1. 需要滿足 PrefixPath.Path 為一條完整的時間序列,即 <PrefixPath> + <Path> = <Timeseries>
2. 當前 SELECT LAST 語句只支持包含'>'或'>='的時間過濾條件
3. 結果集以四列的表格的固定形式返回。
例如 "select last s1, s2 from root.sg.d1, root.sg.d2", 結果集返回如下:
| Time | timeseries | value | dataType |
| --- | ------------- | ----- | -------- |
| 5 | root.sg.d1.s1 | 100 | INT32 |
| 2 | root.sg.d1.s2 | 400 | INT32 |
| 4 | root.sg.d2.s1 | 250 | INT32 |
| 9 | root.sg.d2.s2 | 600 | INT32 |
4. 注意 LAST 語句不支持與"disable align"關鍵詞一起使用。- As 語句
As 語句為 SELECT 語句中出現的時間序列規定一個別名
在每個查詢中都可以使用 As 語句來規定時間序列的別名,但是對于通配符的使用有一定限制。
1. 原始數據查詢:
select s1 as speed, s2 as temperature from root.sg.d1
結果集將顯示為:
| Time | speed | temperature |
| ... | ... | .... |
2. 聚合查詢
select count(s1) as s1_num, max_value(s2) as s2_max from root.sg.d1
3. 降頻聚合查詢
select count(s1) as s1_num from root.sg.d1 group by ([100,500), 80ms)
4. 按設備對齊查詢
select s1 as speed, s2 as temperature from root.sg.d1 align by device
select count(s1) as s1_num, count(s2), count(s3) as s3_num from root.sg.d2 align by device
5. 最新數據查詢
select last s1 as speed, s2 from root.sg.d1
規則:
1. 除按設備對齊查詢外,每一個 AS 語句必須唯一對應一個時間序列。
E.g. select s1 as temperature from root.sg.*
此時如果存儲組 root.sg.* 中含有多個設備,則會拋出異常。
2. 按設備對齊查詢中,每個 AS 語句對應的前綴路徑可以含多個設備,而后綴路徑不能含多個傳感器。
E.g. select s1 as temperature from root.sg.*
這種情況即使有多個設備,也可以正常顯示。
E.g. select * as temperature from root.sg.d1
這種情況如果 * 匹配多個傳感器,則無法正常顯示。- Regexp 語句
Regexp語句僅支持數據類型為 TEXT的列進行過濾,傳入的過濾條件為 Java 標準庫風格的正則表達式
SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause>
Select Clause : <Path> [COMMA <Path>]*
FromClause : < PrefixPath > [COMMA < PrefixPath >]*
WhereClause : andExpression (OPERATOR_OR andExpression)*
andExpression : predicate (OPERATOR_AND predicate)*
predicate : (suffixPath | fullPath) REGEXP regularExpression
regularExpression: Java standard regularexpression, like '^[a-z][0-9]$', [details](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html)
Eg. select s1 from root.sg.d1 where s1 regexp '^[0-9]*$'
Eg. select s1, s2 FROM root.sg.d1 where s1 regexp '^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$' and s2 regexp '^\d{15}|\d{18}$'
Eg. select * from root.sg.d1 where s1 regexp '^[a-zA-Z]\w{5,17}$'
Eg. select * from root.sg.d1 where s1 regexp '^\d{4}-\d{1,2}-\d{1,2}' and time > 100- Like 語句
Like語句的用法和mysql相同, 但是僅支持對數據類型為 TEXT的列進行過濾
SELECT <SelectClause> FROM <FromClause> WHERE <WhereClause>
Select Clause : <Path> [COMMA <Path>]*
FromClause : < PrefixPath > [COMMA < PrefixPath >]*
WhereClause : andExpression (OPERATOR_OR andExpression)*
andExpression : predicate (OPERATOR_AND predicate)*
predicate : (suffixPath | fullPath) LIKE likeExpression
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.
Eg. select s1 from root.sg.d1 where s1 like 'abc'
Eg. select s1, s2 from root.sg.d1 where s1 like 'abc%'
Eg. select * from root.sg.d1 where s1 like 'abc_'
Eg. select * from root.sg.d1 where s1 like 'abc\%'
這種情況,'\%'表示'%'將會被轉義
結果集將顯示為:
| Time | Path | Value |
| --- | ------------ | ----- |
| 200 | root.sg.d1.s1| abc% |數據庫管理語句
- 創建用戶
CREATE USER <userName> <password>;
userName:=identifier
password:=string
Eg: IoTDB > CREATE USER thulab 'passwd';- 刪除用戶
DROP USER <userName>;
userName:=identifier
Eg: IoTDB > DROP USER xiaoming;- 創建角色
CREATE ROLE <roleName>;
roleName:=identifie
Eg: IoTDB > CREATE ROLE admin;- 刪除角色
DROP ROLE <roleName>;
roleName:=identifier
Eg: IoTDB > DROP ROLE admin;- 賦予用戶權限
GRANT USER <userName> PRIVILEGES <privileges> ON <nodeName>;
userName:=identifier
nodeName:=identifier (DOT identifier)*
privileges:= string (COMMA string)*
Eg: IoTDB > GRANT USER tempuser PRIVILEGES DELETE_TIMESERIES on root.ln;- 賦予角色權限
GRANT ROLE <roleName> PRIVILEGES <privileges> ON <nodeName>;
privileges:= string (COMMA string)*
roleName:=identifier
nodeName:=identifier (DOT identifier)*
Eg: IoTDB > GRANT ROLE temprole PRIVILEGES DELETE_TIMESERIES ON root.ln;- 賦予用戶角色
GRANT <roleName> TO <userName>;
roleName:=identifier
userName:=identifier
Eg: IoTDB > GRANT temprole TO tempuser;- 撤銷用戶權限
REVOKE USER <userName> PRIVILEGES <privileges> ON <nodeName>;
privileges:= string (COMMA string)*
userName:=identifier
nodeName:=identifier (DOT identifier)*
Eg: IoTDB > REVOKE USER tempuser PRIVILEGES DELETE_TIMESERIES on root.ln;- 撤銷角色權限
REVOKE ROLE <roleName> PRIVILEGES <privileges> ON <nodeName>;
privileges:= string (COMMA string)*
roleName:= identifier
nodeName:=identifier (DOT identifier)*
Eg: IoTDB > REVOKE ROLE temprole PRIVILEGES DELETE_TIMESERIES ON root.ln;- 撤銷用戶角色
REVOKE <roleName> FROM <userName>;
roleName:=identifier
userName:=identifier
Eg: IoTDB > REVOKE temprole FROM tempuser;- 列出用戶
LIST USER
Eg: IoTDB > LIST USER- 列出角色
LIST ROLE
Eg: IoTDB > LIST ROLE- 列出權限
LIST PRIVILEGES USER <username> ON <path>;
username:=identifier
path=‘root’ (DOT identifier)*
Eg: IoTDB > LIST PRIVILEGES USER sgcc_wirte_user ON root.sgcc;- 列出角色權限
LIST ROLE PRIVILEGES <roleName>
roleName:=identifier
Eg: IoTDB > LIST ROLE PRIVILEGES actor;- 列出角色在具體路徑上的權限
LIST PRIVILEGES ROLE <roleName> ON <path>;
roleName:=identifier
path=‘root’ (DOT identifier)*
Eg: IoTDB > LIST PRIVILEGES ROLE wirte_role ON root.sgcc;- 列出用戶權限
LIST USER PRIVILEGES <username> ;
username:=identifier
Eg: IoTDB > LIST USER PRIVILEGES tempuser;- 列出用戶角色
LIST ALL ROLE OF USER <username> ;
username:=identifier
Eg: IoTDB > LIST ALL ROLE OF USER tempuser;- 列出角色用戶
LIST ALL USER OF ROLE <roleName>;
roleName:=identifier
Eg: IoTDB > LIST ALL USER OF ROLE roleuser;- 更新密碼
ALTER USER <username> SET PASSWORD <password>;
roleName:=identifier
password:=string
Eg: IoTDB > ALTER USER tempuser SET PASSWORD 'newpwd';功能
- COUNT
SELECT COUNT(Path) (COMMA COUNT(Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT COUNT(status), COUNT(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- FIRST_VALUE
原有的FIRST方法在v0.10.0版本更名為FIRST_VALUE。
SELECT FIRST_VALUE (Path) (COMMA FIRST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT FIRST_VALUE (status), FIRST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- LAST_VALUE
SELECT LAST_VALUE (Path) (COMMA LAST_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT LAST_VALUE (status), LAST_VALUE (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- MAX_TIME
SELECT MAX_TIME (Path) (COMMA MAX_TIME (Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT MAX_TIME(status), MAX_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- MAX_VALUE
SELECT MAX_VALUE (Path) (COMMA MAX_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT MAX_VALUE(status), MAX_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- EXTREME
極值:具有最大絕對值的值(正值優先)
SELECT EXTREME (Path) (COMMA EXT (Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT EXTREME(status), EXTREME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- AVG
原有的MEAN方法在v0.9.0版本更名為AVG。
SELECT AVG (Path) (COMMA AVG (Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT AVG (temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- MIN_TIME
SELECT MIN_TIME (Path) (COMMA MIN_TIME (Path))*FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT MIN_TIME(status), MIN_TIME(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- MIN_VALUE
SELECT MIN_VALUE (Path) (COMMA MIN_VALUE (Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT MIN_VALUE(status),MIN_VALUE(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>- NOW
NOW()
Eg. INSERT INTO root.ln.wf01.wt01(timestamp,status) VALUES(NOW(), false)
Eg. DELETE FROM root.ln.wf01.wt01.status, root.ln.wf01.wt01.temperature WHERE time < NOW()
Eg. SELECT * FROM root WHERE time < NOW()
Eg. SELECT COUNT(temperature) FROM root.ln.wf01.wt01 WHERE time < NOW()- SUM
SELECT SUM(Path) (COMMA SUM(Path))* FROM <FromClause> [WHERE <WhereClause>]?
Eg. SELECT SUM(temperature) FROM root.ln.wf01.wt01 WHERE root.ln.wf01.wt01.temperature < 24
Note: the statement needs to satisfy this constraint: <PrefixPath> + <Path> = <Timeseries>TTL
IoTDB 支持對存儲組級別設置數據存活時間(TTL),這使得 IoTDB 可以定期、自動地刪除一定時間之前的數據。合理使用 TTL
可以幫助您控制 IoTDB 占用的總磁盤空間以避免出現磁盤寫滿等異常。并且,隨著文件數量的增多,查詢性能往往隨之下降,
內存占用也會有所提高。及時地刪除一些較老的文件有助于使查詢性能維持在一個較高的水平和減少內存資源的占用。
IoTDB 中的 TTL 操作可以由以下的語句進行實現:
- 設置 TTL
SET TTL TO StorageGroupName TTLTime
Eg. SET TTL TO root.group1 3600000
這個例子展示了如何使得 root.group1 這個存儲組只保留近一個小時的數據,一個小時前的數據會被刪除或者進入不可見狀態。
注意:TTLTime 應是毫秒時間戳。一旦 TTL 被設置,超過 TTL 時間范圍的寫入將被拒絕。- 取消 TTL
UNSET TTL TO StorageGroupName
Eg. UNSET TTL TO root.group1
這個例子展示了如何取消存儲組 root.group1 的 TTL,這將使得該存儲組接受任意時刻的數據。- 顯示 TTL
SHOW ALL TTL
SHOW TTL ON StorageGroupNames
Eg.1 SHOW ALL TTL
這個例子會給出所有存儲組的 TTL。
Eg.2 SHOW TTL ON root.group1,root.group2,root.group3
這個例子會顯示指定的三個存儲組的 TTL。
注意:沒有設置 TTL 的存儲組的 TTL 將顯示為 null。注意:當您對某個存儲組設置 TTL 的時候,超過 TTL 范圍的數據將會立即不可見。但由于數據文件可能混合包含處在 TTL 范圍內
與范圍外的數據,同時數據文件可能正在接受查詢,數據文件的物理刪除不會立即進行。如果你在此時取消或者調大 TTL,
一部分之前不可見的數據可能重新可見,而那些已經被物理刪除的數據則將永久丟失。也就是說,TTL 操作不會原子性地刪除
對應的數據。因此我們不推薦您頻繁修改 TTL,除非您能接受該操作帶來的一定程度的不可預知性。
- 刪除時間分區 (實驗性功能)
DELETE PARTITION StorageGroupName INT(COMMA INT)*
Eg DELETE PARTITION root.sg1 0,1,2
該例子將刪除存儲組 root.sg1 的前三個時間分區partitionId 可以通過查看數據文件夾獲取,或者是計算 timestamp / partitionInterval得到。
中止查詢
- 顯示正在執行的查詢列表
SHOW QUERY PROCESSLIST- 中止查詢
KILL QUERY INT?
E.g. KILL QUERY
E.g. KILL QUERY 2設置系統為只讀/可寫入模式
IoTDB> SET SYSTEM TO READONLY
IoTDB> SET SYSTEM TO WRITABLE標識符列表
QUOTE := '\'';
DOT := '.';
COLON : ':' ;
COMMA := ',' ;
SEMICOLON := ';' ;
LPAREN := '(' ;
RPAREN := ')' ;
LBRACKET := '[';
RBRACKET := ']';
EQUAL := '=' | '==';
NOTEQUAL := '<>' | '!=';
LESSTHANOREQUALTO := '<=';
LESSTHAN := '<';
GREATERTHANOREQUALTO := '>=';
GREATERTHAN := '>';
DIVIDE := '/';
PLUS := '+';
MINUS := '-';
STAR := '*';
Letter := 'a'..'z' | 'A'..'Z';
HexDigit := 'a'..'f' | 'A'..'F';
Digit := '0'..'9';
Boolean := TRUE | FALSE | 0 | 1 (case insensitive)StringLiteral := ( '\'' ( ~('\'') )* '\'';
eg. 'abc'Integer := ('-' | '+')? Digit+;
eg. 123
eg. -222Float := ('-' | '+')? Digit+ DOT Digit+ (('e' | 'E') ('-' | '+')? Digit+)?;
eg. 3.1415
eg. 1.2E10
eg. -1.33Identifier := (Letter | '_') (Letter | Digit | '_' | MINUS)*;
eg. a123
eg. _abc123常量列表
PointValue : Integer | Float | StringLiteral | BooleanTimeValue : Integer | DateTime | ISO8601 | NOW()
Note: Integer means timestamp type.
DateTime :
eg. 2016-11-16T16:22:33+08:00
eg. 2016-11-16 16:22:33+08:00
eg. 2016-11-16T16:22:33.000+08:00
eg. 2016-11-16 16:22:33.000+08:00
Note: DateTime Type can support several types, see Chapter 3 Datetime section for details.
PrecedenceEqualOperator : EQUAL | NOTEQUAL | LESSTHANOREQUALTO | LESSTHAN | GREATERTHANOREQUALTO | GREATERTHANTimeseries : ROOT [DOT <LayerName>]* DOT <SensorName>
LayerName : Identifier
SensorName : Identifier
eg. root.ln.wf01.wt01.status
eg. root.sgcc.wf03.wt01.temperature
Note: Timeseries must be start with root(case insensitive) and end with sensor name.
PrefixPath : ROOT (DOT <LayerName>)*
LayerName : Identifier | STAR
eg. root.sgcc
eg. root.*
Path: (ROOT | <LayerName>) (DOT <LayerName>)*
LayerName: Identifier | STAR
eg. root.ln.wf01.wt01.status
eg. root.*.wf01.wt01.status
eg. root.ln.wf01.wt01.*
eg. *.wt01.*
eg. *