查询数据流表中的符合条件的列的数据。
语法
SELECT setQuantifier selectItem (',' selectItem)*
(FROM relation (',' relation)*)
(WINDOW windowExpression)
(WHERE where=booleanExpression)
(GROUP BY groupBy)
;
selectItem说明
参数值 | 说明 | 语句示例 |
---|---|---|
* | 查询所有列。 | SELECT * FROM Test; |
columnName | 查询指定列,指定列支持聚合函数和其他设置,具体请参见列的配置。 | SELECT gender FROM Test; |
AS | 别名。 | SELECT REGISTERTIME AS rtime FROM Test; |
列的配置
配置值 | 说明 | 语句示例 |
---|---|---|
MAX | 返回指定列的最大值。 | SELECT item_type,MAX(price) FROM orders GROUP BY item_type; |
MIN | 返回指定列的最小值。 | SELECT item_type,MIN(price) FROM orders GROUP BY item_type; |
SUM | 返回指定列的总和。 | SELECT item_type,SUM(price) FROM orders GROUP BY item_type; |
COUNT | 返回指定列的个数。 | SELECT item_type,COUNT(item_id) FROM orders GROUP BY item_type; |
AVG | 返回指定列的平均值,通过SUM(col)/COUNT(*) 实现。 | SELECT item_type, SUM(price)/COUNT(*) AS avg_price FROM orders GROUP BY item_type; |
LEN(column_name) | 返回指定列的长度。 | SELECT LEN(column_name) FROM orders; |
IFNULL(value1,value2) | 返回value1或者value2的值,需要遵循以下几点:
|
SELECT IFNULL("Hello", "RUNOOB"); |
TRIM(column_name) | 删除字符串首尾的空格部分。 | SELECT TRIM(column_name) FROM orders; |
CONCAT(str1, str2,...) | 返回拼接后的字符串。 | SELECT CONCAT("Hello", "RUNOOB"); |
SUBSTRING(string,offset,len) | 截取字符串的一部分,offset从1开始,len为截取长度。 | SELECT SUBSTRING("Hello",1 ,2); |
UCASE(column_name) | 将列名转化为大写字符串。 | SELECT UCASE(column_name) FROM orders; |
LCASE(column_name) | 将列名转化为小写字符串。 | SELECT LCASE(column_name) FROM orders; |
WHERE说明
运算符或操作符 | 说明 | 语句示例 |
---|---|---|
= | 等于 | SELECT * FROM Test WHERE gender = 'FEMALE'; |
!= | 不等于 | SELECT * FROM Test WHERE gender != 'FEMALE'; |
<> | 不等于 | SELECT * FROM Test WHERE REGISTERTIME <> 1; |
> | 大于 | SELECT * FROM Test WHERE REGISTERTIME > 1; |
>= | 大于等于 | SELECT * FROM Test WHERE REGISTERTIME >= 1; |
< | 小于 | SELECT * FROM Test WHERE REGISTERTIME < 1; |
<= | 小于等于 | SELECT * FROM Test WHERE REGISTERTIME <= 1; |
BETWEEN | 选取介于两个值之间的数据范围内的值。 | SELECT * FROM Test WHERE REGISTERTIME BETWEEN 1 AND 3; |
LIKE | 在WHERE子句中搜索列中的指定模式。 | SELECT * FROM Test WHERE USERID LIKE 'USER%'; |
IS NULL | 空值判断 | SELECT * FROM Test WHERE USERID IS NULL; |
IS NOT NULL | 非空值判断 | SELECT * FROM Test WHERE USERID IS NOT NULL; |
AND | 对两个或两个以上的条件记录数据进行过滤,如果第一个条件和第二个条件都满足,则AND运算符显示一条记录数据。 | SELECT * FROM Test WHERE GENDER = 'MALE' AND REGIONID = 'REGION_1'; |
OR | 对两个或两个以上的条件记录数据进行过滤,如果第一个条件和第二个条件中任何一个满足,则OR运算符显示一条记录数据。 | SELECT * FROM Test WHERE GENDER = 'MALE' OR REGIONID = 'REGION_1'; |
IN | 查询结果中包含多个值。 | SELECT * FROM Test WHERE REGIONID IN (REGION_1','REGION_2'); |
NOT IN | 查询结果中不包含多个值。 | SELECT * FROM Test WHERE REGIONID NOT IN (REGION_1','REGION_2'); |
GROUP BY说明
GROUP BY子句对查询结果进行分组,示例如下:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
WINDOW说明
WINDOW子句允许您设置如何将具有相同主建的数据分组到窗口中,来进行聚合或连接等操作。窗口将向数据中添加了两个额外的系统列WINDOWSTART和WINDOWEND,提供了窗口边界。支持以下WINDOW类型:
- HOPPING window
根据数据的时间戳将输入数据分组到固定大小的(可能)重叠的窗口。您必须为HOPPING window窗口指定窗口大小和滑动距离。以下语句表示如何创建HOPPING window的查询。
SELECT windowstart, windowend, item_id, SUM(quantity) FROM orders WINDOW HOPPING (SIZE 20 SECONDS, ADVANCE BY 5 SECONDS) GROUP BY item_id;
- TUMBLING window
根据数据的时间戳将输入数据分组到固定大小、不重叠的窗口中。您必须指定滚动窗口的窗口大小。TUMBLING window是HOPPING window的一种特殊情况,其中窗口大小等于滑动距离。以下语句表示如何创建TUMBLING window的查询。
SELECT windowstart, windowend, item_id, SUM(quantity) FROM orders WINDOW TUMBLING (SIZE 20 SECONDS) GROUP BY item_id;
- Session window
将输入数据分组到会话中,您必须为Session window窗口指定不活跃的时间间隔。例如,将不活跃的时间间隔设置为5分钟。对于给定的主键(例如alice),如果超过5分钟没有新的输入数据到达,则alice的当前会话将关闭,并且后续到达的alice数据都将标记为新会话的开始。以下语句表示如何创建Session window的查询。
SELECT windowstart, windowend, item_id, SUM(quantity) FROM orders WINDOW SESSION (20 SECONDS) GROUP BY item_id;