Hi,

I have a question,

SET STORAGE GROUP TO root.ChangSha;
CREATE TIMESERIES root.ChangSha.A.aa WITH DATATYPE=INT64, ENCODING=RLE;
CREATE TIMESERIES root.ChangSha.aa WITH DATATYPE=INT64, ENCODING=RLE;


insert into root.ChangSha.A(timestamp,aa) values(1,1);
insert into root.ChangSha(timestamp,aa) values(1,1);



Select * from root.ChangSha where aa = 1

Result will print :

+-----------------------------------+------------------------------------+------------------+
|                               Time     |root.ChangSha.A.aa|    
root.ChangSha.aa|
+-----------------------------------+------------------------------------+------------------+
|      1970-01-01T08:00:00.001+08:00|                 1          |              
     1|
|      1970-01-01T08:00:00.002+08:00|              null          |           1|
+-----------------------------------+------------------------------------+—————————+

Which field is device  and how to group by ?


> 在 2019年11月14日,下午12:21,Jialin Qiao <[email protected]> 写道:
> 
> Hi,
> 
>> "group by device" sql can't satisfy this demand. It is because the where 
>> condition of "group by device" is shared by all devices.
> 
> The "shared by all devices" is a little hard to comprehend.  Many users are 
> from relational databases.
> In relational databases, when querying a table, predicates are applied to 
> each row. 
> By default, IoTDB adopts table format: "time, series1, series2, ..., seriesN".
> 
> For this scenario, what users really want is querying on a narrow table : 
> "time, device, sensor1, sensor2, ..., sensor3". 
> Maybe we need to introduce the concept of "Table", and enable users to choose 
> which table that want to use by a "group by device" clause.
> 
> Thanks,
> --
> Jialin Qiao
> School of Software, Tsinghua University
> 
> 乔嘉林
> 清华大学 软件学院
> 
>> -----原始邮件-----
>> 发件人: "Lei Rui (Jira)" <[email protected]>
>> 发送时间: 2019-11-14 11:19:00 (星期四)
>> 收件人: [email protected]
>> 抄送: 
>> 主题: [jira] [Created] (IOTDB-305) a sql to query a group of devices separately
>> 
>> Lei Rui created IOTDB-305:
>> -----------------------------
>> 
>>             Summary: a sql to query a group of devices separately
>>                 Key: IOTDB-305
>>                 URL: https://issues.apache.org/jira/browse/IOTDB-305
>>             Project: Apache IoTDB
>>          Issue Type: New Feature
>>            Reporter: Lei Rui
>> 
>> 
>> First of all, if Bob knows exactly what devices to query (root.sg.d1 and 
>> root.sg.d2 in this case) , he can write sqls for every device:
>> {code:java}
>> sql1: select * from root.sg.d1 where s1=1
>> sql2: select * from root.sg.d2 where s1=1{code}
>> However, when there are many devices or devices are not specified in 
>> advance, Bob wants to query like:
>> {code:java}
>> select * from root.sg.d1,root.sg.d2 where s1=1 <device separate>(a demo 
>> conception)
>> / select * from root.sg.* where s1=1 <device separate>(a demo conception)
>> {code}
>> to return the result same as the concatenation of the results of the above 
>> two queries (i.e., sql1 and sql2) while eliminating the trouble of writing 
>> two separate sqls.
>> 
>> "group by device" sql can't satisfy this demand. It is because the where 
>> condition of "group by device" is shared by all devices. For example,
>> {code:java}
>> select * from root.sg.* where s1=1 group by device
>> {code}
>> equals
>> {code:java}
>> select * from root.sg.d1 where root.sg.d1.s1=1 and root.sg.d2.s1=1
>> select * from root.sg.d2 where root.sg.d1.s1=1 and root.sg.d2.s1=1
>> {code}
>> Note the "and" in the where condition. The following example further 
>> demonstrates the effect:
>> {code:java}
>> SET STORAGE GROUP TO root.ChangSha;
>> CREATE TIMESERIES root.ChangSha.A.aa WITH DATATYPE=INT64, ENCODING=RLE;
>> CREATE TIMESERIES root.ChangSha.A.ab WITH DATATYPE=INT64, ENCODING=RLE;
>> CREATE TIMESERIES root.ChangSha.A.ac WITH DATATYPE=INT64, ENCODING=RLE;
>> CREATE TIMESERIES root.ChangSha.B.aa WITH DATATYPE=INT64, ENCODING=RLE;
>> CREATE TIMESERIES root.ChangSha.B.ab WITH DATATYPE=INT64, ENCODING=RLE;
>> CREATE TIMESERIES root.ChangSha.B.ad WITH DATATYPE=INT64, ENCODING=RLE;
>> insert into root.ChangSha.A(timestamp,aa,ab,ac) values(1,1,1,1);
>> insert into root.ChangSha.B(timestamp,aa,ab,ad) values(2,1,2,2);
>> 
>> select * from root.ChangSha.A, root.ChangSha.B where aa=1 group by 
>> device{code}
>> The above select query equals
>> 
>>  
>> {code:java}
>> select * from root.ChangSha.A where root.ChangSha.A.aa=1 and 
>> root.ChangSha.B.aa=1
>> select * from root.ChangSha.B where root.ChangSha.A.aa=1 and 
>> root.ChangSha.B.aa=1{code}
>>  
>> 
>> This select query will get an empty result because there is no timestamp 
>> under which both root.ChangSha.A.aa=1 and root.ChangSha.B.aa=1.
>> 
>> What Bob wants is: 
>> {code:java}
>> select * from root.ChangSha.A, root.ChangSha.B where aa=1 <device 
>> separate>(a demo conception)
>> {code}
>> equals
>> {code:java}
>> select * from root.ChangSha.A where root.ChangSha.A.aa=1
>> select * from root.ChangSha.B where root.ChangSha.B.aa=1{code}
>> to get the result like:
>> ||Time||Device||aa||ab||ac||ad||
>> |1970-01-01T08:00:00.001+08:00|root.ChangSha.A|1|1|1|null|
>> |1970-01-01T08:00:00.002+08:00|root.ChangSha.B|1|2|null|2|
>> 
>>  
>> 
>> 
>> 
>> --
>> This message was sent by Atlassian Jira
>> (v8.3.4#803005)



Reply via email to