1.lateral view的用法
这个函数相当于拆开行变成列。
可以理解为行转列。
select
id,order_label
from table_bx
lateral view explode(split(work_order_label, ',')) order_label as order_label
2.json_tuple和get_json_object的区别,尤其是性能方面
get_json_object 函数的作用:用来解析json字符串的一个字段;
json_tuple 函数的作用:用来解析json字符串中的多个字段。
取多个key值时,json_tuple只解析一次,而get_json_object需要解析多次,所以大部分情况下json_tuple比get_json_object高效。
3.group_concat,concat_ws,wm_concat的区别,举例说明
group_concat:返回一个字符串结果,该结果由分组中的值连接组合而成。
源数据:
SELECT locus,id,journal FROM info WHERE locus IN('AB086827','AF040764');
+----------+----+--------------------------+
| locus | id | journal |
+----------+----+--------------------------+
| AB086827 | 1 | Unpublished |
| AB086827 | 2 | Submitted (20-JUN-2002) |
| AF040764 | 23 | Unpublished |
| AF040764 | 24 | Submitted (31-DEC-1997) |
+----------+----+--------------------------+
语句 SELECT locus,GROUP_CONCAT(id) FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus; 的返回结果为
+----------+------------------+
| locus | GROUP_CONCAT(id) |
+----------+------------------+
| AB086827 | 1,2 |
| AF040764 | 23,24 |
+----------+------------------+
concat_ws:使用语法为:CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
SELECT CONCAT_WS(',','First name',NULL,'Last Name');返回结果为
+----------------------------------------------+
| CONCAT_WS(',','First name',NULL,'Last Name') |
+----------------------------------------------+
| First name,Last Name |
+----------------------------------------------+
wm_concat:
用指定的spearator做分隔符,做字符串类型的SUM操作。 参数说明: separator,string类型常量,分隔符。其他类型或非常量将引发异常。 string,string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。 返回值: 以separator分隔的字符串。 备注: 对语句SELECT wm_concat(‘,’,name) from table;若table为空集合,这条语句返回{NULL}。
4.collect_list,collect_set的区别,举例说明
它们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重而collect_set去重。
举例:源数据
按用户分组,取出每个用户每天看过的所有视频的名字:
collect_list:
select username, collect_list(video_name) from t_visit_video group by username ;
结果:
李四对应的数据中有两个“霸王别姬”
collect_set:
select username, collect_set(video_name) from t_visit_video group by username;
结果:
李四对应的数据中只有一个“霸王别姬”
5.了解grouping set和cube语法,举例说明
cube:使用CUBE操作符时,在生成原有统计结果基础上,生成纵向小计结果。
grouping set:只返回统计信息。