select_stream
SELECT Stream
SELECT로 Stream 데이터를 조회
테스트 데이터 입력: Redis 명령으로 입력
온도 temp temperature
습도 humid humidity
압력 pres pressure
진동 vib vibration
Example
명령> | xadd sensor_1 * temp 10 humid 20 pres 30 vib 40 |
명령> | xadd sensor_1 * temp 11 humid 25 pres 28 vib 50 |
명령> | xadd sensor_1 * temp 12 humid 30 pres 26 vib 60 |
명령> | xadd sensor_1 * temp 13 humid 35 pres 24 vib 20 |
명령> | xadd sensor_1 * temp 14 humid 40 pres 22 vib 30 |
명령> | xadd sensor_2 * temp 124.7 humid 46.8 pres 150.4 flag AA1 |
명령> | xadd sensor_2 * temp 123.4 humid 50.4 pres 148.6 flag AA2 |
명령> | xadd sensor_2 * temp 119.8 humid 48.1 pres 149.2 flag BB1 |
명령> | xadd sensor_2 * temp 128.1 humid 51.2 flag BB2 |
명령> | xadd sensor_2 * temp 117.4 humid 46.7 flag BB3 |
명령> | xadd sensor_3 * temp 10 |
명령> | xadd sensor_3 * temp 50 |
명령> | xadd sensor_3 * temp 30 |
명령> | xadd sensor_3 * temp 20 |
명령> | xadd sensor_3 * temp 40 |
명령> | xadd mys1 * temp 10 |
명령> | xadd mys1 * temp 50 |
명령> | xadd mys1 * temp 30 |
SQL Insert 문으로 입력
Example
명령> | insert into stream values('sensor_1', '*', 'temp', 10, 'humid', '20', 'pres', '30', 'vib', '40'); |
명령> | insert into stream values('sensor_1', '*', 'temp', '11', 'humid', '25', 'pres', '28', 'vib', '50'); |
명령> | insert into stream values('sensor_1', '*', 'temp', '12', 'humid', '30', 'pres', '26', 'vib', '60'); |
명령> | insert into stream values('sensor_1', '*', 'temp', '13', 'humid', '35', 'pres', '24', 'vib', '20'); |
명령> | insert into stream values('sensor_1', '*', 'temp', '14', 'humid', '40', 'pres', '22', 'vib', '30'); |
명령> | insert into stream values('sensor_2', '*', 'temp', '124.7', 'humid', '46.8', 'pres', '150.4', 'flag', 'AA1'); |
명령> | insert into stream values('sensor_2', '*', 'temp', '123.4', 'humid', '50.4', 'pres', '148.6', 'flag', 'AA2'); |
명령> | insert into stream values('sensor_2', '*', 'temp', '119.8', 'humid', '48.1', 'pres', '149.2', 'flag', 'BB1'); |
명령> | insert into stream values('sensor_2', '*', 'temp', '128.1', 'humid', '51.2', 'flag', 'BB2'); |
명령> | insert into stream values('sensor_2', '*', 'temp', '117.4', 'humid', '46.7', 'flag', 'BB3'); |
명령> | insert into stream values('sensor_3', '*', 'temp', '10'); |
명령> | insert into stream values('sensor_3', '*', 'temp', '50'); |
명령> | insert into stream values('sensor_3', '*', 'temp', '30'); |
명령> | insert into stream values('sensor_3', '*', 'temp', '20'); |
명령> | insert into stream values('sensor_3', '*', 'temp', '40'); |
명령> | insert into stream values('mys1', '*', 'temp', '10'); |
명령> | insert into stream values('mys1', '*', 'temp', '50'); |
명령> | insert into stream values('mys1', '*', 'temp', '30'); |
SELECT
SELECT * : 포함된 모든 필드를 조회합니다.
SELECT key, id, field1, field2 : 조회할 필드를 지정합니다.
SELECT field1 name1 or field1 AS name1 --> alias(별명) 사용 가능
FROM
FROM stream.*
FROM stream.mystream*
FROM stream.mystream1
SELECT * FROM STREAM.MYSTREAM*
Stream에서 키와 필드를 조회한다.
Example
명령> | select * from stream.sensor_1; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355128-0|10|20|30|40 2) sensor_1|1610347355132-0|11|25|28|50 3) sensor_1|1610347355135-0|12|30|26|60 4) sensor_1|1610347355138-0|13|35|24|20 5) sensor_1|1610347355141-0|14|40|22|30 |
명령> | select * from stream.sensor*; opcode |
결과> |
0) key|id|temp|humid|pres|vib|flag 1) sensor_1|1610347355128-0|10|20|30|40|(nil) 2) sensor_1|1610347355132-0|11|25|28|50|(nil) 중간 생략 15) sensor_3|1610347355174-0|40|(nil)|(nil)|(nil)|(nil) |
명령> | select * from stream.my*; opcode |
결과> |
0) key|id|temp 1) mys1|1610347355177-0|10 2) mys1|1610347355180-0|50 3) mys1|1610347355184-0|30 |
ORDER BY 1
정렬(sort)해서 보여준다.
Example
명령> | select * from stream.sensor_1 order by vib; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355138-0|13|35|24|20 2) sensor_1|1610347355141-0|14|40|22|30 3) sensor_1|1610347355128-0|10|20|30|40 4) sensor_1|1610347355132-0|11|25|28|50 5) sensor_1|1610347355135-0|12|30|26|60 |
명령> | select * from stream.sensor_1 order by temp desc; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355141-0|14|40|22|30 2) sensor_1|1610347355138-0|13|35|24|20 3) sensor_1|1610347355135-0|12|30|26|60 4) sensor_1|1610347355132-0|11|25|28|50 5) sensor_1|1610347355128-0|10|20|30|40 |
ORDER BY 2
Example
명령> | select distinct key from stream.sensor* order by key desc; opcode |
결과> |
0) key 1) sensor_3 2) sensor_2 3) sensor_1 |
명령> | select * from stream.sensor* order by key, id desc; opcode |
결과> |
0) key|id|temp|humid|pres|vib|flag 1) sensor_1|1610347355141-0|14|40|22|30|(nil) 2) sensor_1|1610347355138-0|13|35|24|20|(nil) 3) sensor_1|1610347355135-0|12|30|26|60|(nil) 중간 생략 13) sensor_3|1610347355168-0|30|(nil)|(nil)|(nil)|(nil) 14) sensor_3|1610347355164-0|50|(nil)|(nil)|(nil)|(nil) 15) sensor_3|1610347355160-0|10|(nil)|(nil)|(nil)|(nil) |
ORDER BY NULLS FIRST/LAST
Example
명령> | select * from stream.sensor_2 order by pres; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355154-0|128.1|51.2|(nil)|BB2 2) sensor_2|1610347355157-0|117.4|46.7|(nil)|BB3 3) sensor_2|1610347355146-0|123.4|50.4|148.6|AA2 4) sensor_2|1610347355150-0|119.8|48.1|149.2|BB1 5) sensor_2|1610347355144-0|124.7|46.8|150.4|AA1 |
명령> | select * from stream.sensor_2 order by pres nulls last; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355146-0|123.4|50.4|148.6|AA2 2) sensor_2|1610347355150-0|119.8|48.1|149.2|BB1 3) sensor_2|1610347355144-0|124.7|46.8|150.4|AA1 4) sensor_2|1610347355154-0|128.1|51.2|(nil)|BB2 5) sensor_2|1610347355157-0|117.4|46.7|(nil)|BB3 |
LIMIT
출력 행 수를 제한한다.
Example
명령> | select * from stream.sensor_1 limit 3; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355128-0|10|20|30|40 2) sensor_1|1610347355132-0|11|25|28|50 3) sensor_1|1610347355135-0|12|30|26|60 |
명령> | select * from stream.sensor_1 limit 3, 2; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355138-0|13|35|24|20 2) sensor_1|1610347355141-0|14|40|22|30 |
FUNCTIONS
COUNT(), LEN()
개수를 조회한다. len()은 value(값)의 개수를 구합니다.
Example
명령> | select count(*) from stream.sensor_1; opcode | ||||||||||
결과> |
0) count(*) 1) 5 | ||||||||||
명령> | select count(key) from stream.sensor*;
opcode
결과> |
0) count(key) | 1) 3 명령> | select key, len(key) from stream.*; | 결과> |
0) key|len(key) | 1) mys1|3 2) sensor_1|5 3) sensor_2|5 4) sensor_3|5 명령> | select key, count(*) from stream.* group by key; | 결과> |
0) key|count(*) | 1) mys1|3 2) sensor_1|5 3) sensor_2|5 4) sensor_3|5 |
MAX(), MIN()
최댓값, 최솟값을 조회한다.
Example
명령> | select min(temp), max(temp) from stream.sensor_1; opcode |
결과> |
0) min(temp)|max(temp) 1) 10|14 |
명령> | select key,id,min(temp) from stream.sensor_1; opcode |
결과> |
0) key|id|min(temp) 1) sensor_1|1610347355128-0|10 |
명령> | select distinct key,valcnt(key) from stream.*; opcode |
결과> |
0) key|valcnt(key) 1) mys1|3 2) sensor_1|5 3) sensor_2|5 4) sensor_3|5 |
숫자 함수
SUM(), AVG()
합계, 평균을 구한다.
Example
명령> | select sum(temp), avg(temp) from stream.sensor_1; opcode |
결과> |
0) sum(temp)|avg(temp) 1) 60|12.0 |
WHERE 조건
비교: <, <=
키 비교
Example
명령> | select * from stream.sensor* where key < 'sensor_2'; opcode |
결과> |
0) key|id|temp|humid|pres|vib|flag 1) sensor_1|1610347355128-0|10|20|30|40|(nil) 2) sensor_1|1610347355132-0|11|25|28|50|(nil) 3) sensor_1|1610347355135-0|12|30|26|60|(nil) 4) sensor_1|1610347355138-0|13|35|24|20|(nil) 5) sensor_1|1610347355141-0|14|40|22|30|(nil) |
명령> | select * from stream.sensor* where key <= 'sensor_2'; opcode |
결과> |
0) key|id|temp|humid|pres|vib|flag 1) sensor_1|1610347355128-0|10|20|30|40|(nil) 2) sensor_1|1610347355132-0|11|25|28|50|(nil) 3) sensor_1|1610347355135-0|12|30|26|60|(nil) 4) sensor_1|1610347355138-0|13|35|24|20|(nil) 5) sensor_1|1610347355141-0|14|40|22|30|(nil) 6) sensor_2|1610347355144-0|124.7|46.8|150.4|(nil)|AA1 7) sensor_2|1610347355146-0|123.4|50.4|148.6|(nil)|AA2 8) sensor_2|1610347355150-0|119.8|48.1|149.2|(nil)|BB1 9) sensor_2|1610347355154-0|128.1|51.2|(nil)|(nil)|BB2 10) sensor_2|1610347355157-0|117.4|46.7|(nil)|(nil)|BB3 |
비교: >, >=
Example
명령> | select * from stream.sensor* where key > 'sensor_2'; opcode |
결과> |
0) key|id|temp|humid|pres|vib|flag 1) sensor_3|1610347355160-0|10|(nil)|(nil)|(nil)|(nil) 2) sensor_3|1610347355164-0|50|(nil)|(nil)|(nil)|(nil) 3) sensor_3|1610347355168-0|30|(nil)|(nil)|(nil)|(nil) 4) sensor_3|1610347355171-0|20|(nil)|(nil)|(nil)|(nil) 5) sensor_3|1610347355174-0|40|(nil)|(nil)|(nil)|(nil) |
명령> | select * from stream.sensor* where key >= 'sensor_2'; opcode |
결과> |
0) key|id|temp|humid|pres|vib|flag 1) sensor_2|1610347355144-0|124.7|46.8|150.4|(nil)|AA1 2) sensor_2|1610347355146-0|123.4|50.4|148.6|(nil)|AA2 3) sensor_2|1610347355150-0|119.8|48.1|149.2|(nil)|BB1 4) sensor_2|1610347355154-0|128.1|51.2|(nil)|(nil)|BB2 5) sensor_2|1610347355157-0|117.4|46.7|(nil)|(nil)|BB3 6) sensor_3|1610347355160-0|10|(nil)|(nil)|(nil)|(nil) 7) sensor_3|1610347355164-0|50|(nil)|(nil)|(nil)|(nil) 8) sensor_3|1610347355168-0|30|(nil)|(nil)|(nil)|(nil) 9) sensor_3|1610347355171-0|20|(nil)|(nil)|(nil)|(nil) 10) sensor_3|1610347355174-0|40|(nil)|(nil)|(nil)|(nil) |
비교: !=
Example
명령> | select * from stream.sensor* where key != 'sensor_2'; opcode |
결과> |
0) key|id|temp|humid|pres|vib|flag 1) sensor_1|1610347355128-0|10|20|30|40|(nil) 2) sensor_1|1610347355132-0|11|25|28|50|(nil) 3) sensor_1|1610347355135-0|12|30|26|60|(nil) 4) sensor_1|1610347355138-0|13|35|24|20|(nil) 5) sensor_1|1610347355141-0|14|40|22|30|(nil) 6) sensor_3|1610347355160-0|10|(nil)|(nil)|(nil)|(nil) 7) sensor_3|1610347355164-0|50|(nil)|(nil)|(nil)|(nil) 8) sensor_3|1610347355168-0|30|(nil)|(nil)|(nil)|(nil) 9) sensor_3|1610347355171-0|20|(nil)|(nil)|(nil)|(nil) 10) sensor_3|1610347355174-0|40|(nil)|(nil)|(nil)|(nil) |
값(value) 비교
Example
명령> | select * from stream.sensor_1 where temp = 12; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355135-0|12|30|26|60 |
명령> | select * from stream.sensor_1 where temp >= 12; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355135-0|12|30|26|60 2) sensor_1|1610347355138-0|13|35|24|20 3) sensor_1|1610347355141-0|14|40|22|30 |
AND, OR
Example
명령> | select * from stream.sensor_1 where temp >= 12 and humid > 30; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355138-0|13|35|24|20 2) sensor_1|1610347355141-0|14|40|22|30 |
명령> | select * from stream.sensor_1 where temp >= 12 or humid > 30; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355135-0|12|30|26|60 2) sensor_1|1610347355138-0|13|35|24|20 3) sensor_1|1610347355141-0|14|40|22|30 |
BETWEEN
Example
명령> | select * from stream.sensor_1 where vib between 30 and 50; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355128-0|10|20|30|40 2) sensor_1|1610347355132-0|11|25|28|50 3) sensor_1|1610347355141-0|14|40|22|30 |
명령> | select * from stream.sensor_1 where vib not between 30 and 50; opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355135-0|12|30|26|60 2) sensor_1|1610347355138-0|13|35|24|20 |
IN, NOT IN
Example
명령> | select * from stream.sensor_1 where pres in (24,26,28); opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355132-0|11|25|28|50 2) sensor_1|1610347355135-0|12|30|26|60 3) sensor_1|1610347355138-0|13|35|24|20 |
명령> | select * from stream.sensor_1 where pres not in (24,26,28); opcode |
결과> |
0) key|id|temp|humid|pres|vib 1) sensor_1|1610347355128-0|10|20|30|40 2) sensor_1|1610347355141-0|14|40|22|30 |
명령> | select * from stream.sensor_2 where flag in ('AA2','BB1','BB2'); opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355146-0|123.4|50.4|148.6|AA2 2) sensor_2|1610347355150-0|119.8|48.1|149.2|BB1 3) sensor_2|1610347355154-0|128.1|51.2|(nil)|BB2 |
명령> | select * from stream.sensor_2 where flag not in ('AA2','BB1','BB2'); opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355144-0|124.7|46.8|150.4|AA1 2) sensor_2|1610347355157-0|117.4|46.7|(nil)|BB3 |
IS NULL, IS NOT NULL
Example
명령> | select * from stream.sensor_2 where pres is null; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355154-0|128.1|51.2|(nil)|BB2 2) sensor_2|1610347355157-0|117.4|46.7|(nil)|BB3 |
명령> | select * from stream.sensor_2 where pres is not null; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355144-0|124.7|46.8|150.4|AA1 2) sensor_2|1610347355146-0|123.4|50.4|148.6|AA2 3) sensor_2|1610347355150-0|119.8|48.1|149.2|BB1 |
GLOB
Example
명령> | select * from stream.sensor_2 where flag glob 'AA*'; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355144-0|124.7|46.8|150.4|AA1 2) sensor_2|1610347355146-0|123.4|50.4|148.6|AA2 |
명령> | select * from stream.sensor_2 where flag not glob 'AA*'; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355150-0|119.8|48.1|149.2|BB1 2) sensor_2|1610347355154-0|128.1|51.2|(nil)|BB2 3) sensor_2|1610347355157-0|117.4|46.7|(nil)|BB3 |
LIKE
Example
명령> | select * from stream.sensor_2 where flag like 'aa%'; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355144-0|124.7|46.8|150.4|AA1 2) sensor_2|1610347355146-0|123.4|50.4|148.6|AA2 |
명령> | select * from stream.sensor_2 where flag not like 'aa%'; opcode |
결과> |
0) key|id|temp|humid|pres|flag 1) sensor_2|1610347355150-0|119.8|48.1|149.2|BB1 2) sensor_2|1610347355154-0|128.1|51.2|(nil)|BB2 3) sensor_2|1610347355157-0|117.4|46.7|(nil)|BB3 |
GROUP BY
Example
명령> | select left(flag,2), count(*) from stream.sensor_2 group by left(flag,2); opcode |
결과> |
0) left(flag,2)|count(*) 1) AA|2 2) BB|3 |
GROUP BY HAVING
Example
명령> | select left(flag,2), count(*) from stream.sensor_2 group by left(flag,2) having count(*) > 2; opcode |
결과> |
0) left(flag,2)|count(*) 1) BB|3 |
OPCODE
select * from stream.sensor_1;
select * from stream.sensor*;
select * from stream.my*;
ORDER BY
select * from stream.sensor_1 order by vib;
select * from stream.sensor_1 order by temp desc;
select distinct key from stream.sensor* order by key desc;
select * from stream.sensor* order by key, id desc;
select * from stream.sensor_2 order by pres;
select * from stream.sensor_2 order by pres nulls last;
LIMIT
select * from stream.sensor_1 limit 3;
select * from stream.sensor_1 limit 3, 2;
select count(*) from stream.sensor_1;
select count(key) from stream.sensor*;
select min(temp), max(temp) from stream.sensor_1;
select key,id,min(temp) from stream.sensor_1;
select distinct key,valcnt(key) from stream.*;
select sum(temp), avg(temp) from stream.sensor_1;
WHERE
select * from stream.sensor* where key < 'sensor_2';
select * from stream.sensor* where key <= 'sensor_2';
select * from stream.sensor* where key > 'sensor_2';
select * from stream.sensor* where key >= 'sensor_2';
select * from stream.sensor* where key != 'sensor_2';
select * from stream.sensor_1 where temp = 12;
select * from stream.sensor_1 where temp >= 12;
select * from stream.sensor_1 where temp >= 12 and humid > 30;
select * from stream.sensor_1 where temp >= 12 or humid > 30;
BETWEEN
select * from stream.sensor_1 where vib between 30 and 50;
select * from stream.sensor_1 where vib not between 30 and 50;
IN
select * from stream.sensor_1 where pres in (24,26,28);
select * from stream.sensor_1 where pres not in (24,26,28);
select
select * from stream.sensor_2 where flag not in ('AA2','BB1','BB2');
IS NULL, IS NOT NULL
select * from stream.sensor_2 where pres is null;
select * from stream.sensor_2 where pres is not null;
GLOB
select * from stream.sensor_2 where flag glob 'AA*';
select * from stream.sensor_2 where flag not glob 'AA*';
LIKE
select * from stream.sensor_2 where flag like 'aa%';
select * from stream.sensor_2 where flag not like 'aa%';
GROUP BY
select left(flag,2), count(*) from stream.sensor_2 group by left(flag,2);
select left(flag,2), count(*) from stream.sensor_2 group by left(flag,2) having count(*) > 2;
<< Select Hash | Select Stream | Select Subquery >> |
---|