ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HQL题目记录以及解题思路--持续更新

2021-07-16 14:35:45  阅读:227  来源: 互联网

标签:ename dept -- dno dname 解题 HQL emp


题目一:

# 建表语句,注意!注意!注意!本题测试环境为Hive3.1.0
-- 部门表(dept) dno dname
create table dept(
dno int,
dname string
)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;

-- 人员表(emp) ename dno1 dno2 dno3
create table emp(
ename string,
dno1 int,
dno2 int,
dno3 int
)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;

数据文件:

# dept表
99,人力资源部
100,技术部门
111,大数据
2345,移动端开发
321,IOS开发
5578,数据仓库
334,ETL
7890,Android研发

# emp表
小王,100,111,5578
小李,100,2345,321
小张,100,111,334

加载数据到hive表中,采用本地加载模式

load data local inpath 
'/opt/module/data/dept.txt' into table default.dept;

load data local inpath 
'/opt/module/data/emp.txt' into table default.emp;

解题思路:

-- 原始表初始化
select e.ename,d.dname
from emp e
join dept d
on e.dno1 = d.dno or e.dno2 = d.dno or e.dno3 = d.dno;

-- 失败1:拼接。hive中不能查询非group by的字段
select 
    ename,
    dname
from (
select e.ename,d.dname
from emp e
join dept d
on e.dno1 = d.dno or e.dno2 = d.dno or e.dno3 = d.dno
)tmp
group by ename;


-- 失败2:hive中不能查询非group by的字段
with tmp as (
select e.ename,d.dname
from emp e
join dept d
on e.dno1 = d.dno or e.dno2 = d.dno or e.dno3 = d.dno
)
select ename,concat_ws('>', dname) from tmp group by ename;

-- 成功,注意,本环境为3.1.0;如果是Hive2.x的版本,不能使用or,需要使用where条件,然后union 起来
with tmp as (
    select 
        e.ename,
        d.dname
    from emp e
    join dept d
    on e.dno1 = d.dno 
    or e.dno2 = d.dno 
    or e.dno3 = d.dno
)
select 
    ename,
    concat_ws('>', collect_set(dname))
from tmp
    group by ename;

 

标签:ename,dept,--,dno,dname,解题,HQL,emp
来源: https://www.cnblogs.com/joey-413/p/15019945.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有