大数据(3e)HIVE基础查询

1、单行拆分为多行

1.1、EXPLOOE

SELECT EXPLODE(course) FROM school.student;

1.2、LATERAL VIEW

SELECT t1.s_id,t2.c
FROM school.student t1
LATERAL VIEW EXPLODE(course) t2 as c;

2、多行合并为单行

关键字COLLECT_SET

SELECT
    grade,
    COLLECT_SET(s_id)
FROM school.student
GROUP BY grade;

3、函数

show functions;

4、时间类

今天

SELECT CURRENT_DATE();

昨天

SELECT DATE_SUB(CURRENT_DATE(),1);

时间差:第一个减第二个

SELECT DATEDIFF(CURRENT_DATE(),"2020-12-27");

现在

SELECT UNIX_TIMESTAMP();
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd HH:mm:ss');

5、窗口函数

https://yellow520.blog.youkuaiyun.com/article/details/116151366

6、聚合函数+条件

创建数据,需求:求出不同班男女各多少人

--删库
DROP DATABASE IF EXISTS school CASCADE;
--建库
CREATE DATABASE school LOCATION '/school';
--建表
CREATE TABLE school.student(
name   STRING  COMMENT "姓名",
major  STRING  COMMENT "专业",
sex    STRING  COMMENT "性别"
)COMMENT "学生表"
LOCATION '/school/student';
--插数据
INSERT INTO TABLE school.student VALUES
('剑圣','敏捷','男'),
('先知','智力','男'),
('巫妖','智力','男'),
('守望者','敏捷','女'),
('大法师','智力','女'),
('追风者','敏捷','女');
--查看
SELECT * FROM school.student;

查询(关键字CASEWHEN

SELECT 
    major,
    CONCAT_WS(',',COLLECT_SET(CASE sex WHEN '男' THEN name END)) male,
    CONCAT_WS(',',COLLECT_SET(CASE sex WHEN '女' THEN name END)) female
FROM
    school.student
GROUP BY
    major;
majormalefemale
敏捷剑圣守望者,追风者
智力先知,巫妖大法师
SELECT 
    major,
    SUM(CASE sex WHEN '男' THEN 1 ELSE 0 END) male_count,
    SUM(CASE sex WHEN '女' THEN 1 ELSE 0 END) female_count
FROM
    school.student
GROUP BY
    major;
majormale_countfemale_count
敏捷12
智力21

7、JSON解析

取第1个元素{"name":"剑圣","lv":10}

SELECT GET_JSON_OBJECT(
    '[{"name":"剑圣","lv":10},{"name":"易大师","lv":18}]',
    '$[0]'
)

取第2个元素的name值

SELECT GET_JSON_OBJECT(
    '[{"name":"剑圣","lv":10},{"name":"易大师","lv":18}]',
    '$[1].name'
)

8、排序

  • ORDER BY是全局排序,通常生产环境不用
  • SORT BY是分区内排序
    DISTRIBUTE BY进行分区
    通常SORT BYDISTRIBUTE BY联用
SELECT * FROM student ORDER BY birth;

SET mapreduce.job.reduces=2; -- 配两个ruduce(默认1个)
SELECT * FROM student SORT BY birth;

SELECT * FROM student DISTRIBUTE BY grade SORT BY birth;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值