❤️手撕这十道HiveSQL题还不能吊打面试官,却能保你不被吊打❤️【推荐收藏】
全网最详细的大数据Hive文章系列,强烈建议收藏加关注!
新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点。
目录
系列历史文章
前言
HiveSQL十题
第一题
1、需求
2、数据准备
3、查询SQL
4、执行结果
第二题
1、需求
2、数据准备
3、查询SQL实现
4、执行结果
第三题
1、需求
2、数据准备
3、查询SQL
4、 执行结果
第四题
1、需求
2、数据准备
3、查询SQL
4、执行结果
第五题
1、需求
2、数据准备
3、查询SQL
4、执行结果
第六题
1、需求
2、数据准备
3、查询SQL
4、执行结果
第七题
1、需求
2、数据准备
3、查询SQL
4、执行结果
第八题
1、需求
2、数据准备
3、查询SQL
4、执行结果
第九题
1、需求
2、数据准备
3、查询SQL
4、执行结果
第十题
1、需求
2、数据准备
3、 查询SQL
4、执行结果
最后
系列历史文章
2021年大数据Hive(十二):Hive综合案例!!!
2021年大数据Hive(十一):Hive调优
2021年大数据Hive(十):Hive的数据存储格式
2021年大数据Hive(九):Hive的数据压缩
2021年大数据Hive(八):Hive自定义函数
2021年大数据Hive(七):Hive的开窗函数
2021年大数据Hive(六):Hive的表生成函数
2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
2021年大数据Hive(四):Hive查询语法
2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)
2021年大数据Hive(二):Hive的三种安装模式和MySQL搭配使用
2021年大数据Hive(一):Hive基本概念
前言
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习。
下面是基础的十道HiveSQL题,必须都能手撕出来,不然面试得凉凉了,离吊打面试官你还差100道HiveSQL题,先别想这么多,给自己一个小目标,搞定这十道题!
HiveSQL十题
第一题
1、需求
userId
|
visitDate | visitCount |
u01
|
2021/1/21
|
5 |
u02
|
2021/1/23 | 6 |
u03
|
2021/1/22 | 8 |
u04
|
2021/1/20 | 3 |
u01
|
2021/1/23 | 6 |
u01
|
2021/2/21 | 8 |
u02
|
2021/1/23 | 6 |
u01 | 2021/2/22 | 4 |
用户id | 月份 | 小计 | 累计 |
u01 | 2021-01 | 11 | 11 |
u01 | 2021-02 | 12 | 23 |
u02 | 2021-01 | 12 | 12 |
u03 | 2021-01 | 8 | 8 |
u04 | 2021-01 | 3 | 3 |
2、数据准备
CREATE TABLE test_sql.test1 ( userId string, visitDate string, visitCount INT ) ROW format delimited FIELDS TERMINATED BY "\t";
INSERT INTO TABLE test_sql.test1
VALUES( 'u01', '2021/1/21', 5 ),( 'u02', '2021/1/23', 6 ),( 'u03', '2021/1/22', 8 ),( 'u04', '2021/1/20', 3 ),( 'u01', '2021/1/23', 6 ),( 'u01', '2021/2/21', 8 ),( 'u02', '2021/1/23', 6 ),( 'u01', '2021/2/22', 4 );
3、查询SQL
SELECTt2.userid,t2.visitmonth,subtotal_visit_cnt,sum( subtotal_visit_cnt ) over ( PARTITION BY userid ORDER BY visitmonth ) AS total_visit_cnt
FROM(SELECTuserid,visitmonth,sum( visitcount ) AS subtotal_visit_cnt FROM( SELECT userid, date_format( regexp_replace ( visitdate, '/', '-' ), 'yyyy-MM' ) AS visitmonth, visitcount FROM test_sql.test1 ) t1 GROUP BYuserid,visitmonth ) t2
ORDER BYt2.userid,t2.visitmonth;
4、执行结果
第二题
1、需求
user_id | shop |
u1 | a |
u2 | b |
u1 | b |
u1 | a |
u3 | c |
u4 | b |
u1 | a |
u2 | c |
u5 | b |
u4 | b |
u6 | c |
u2 | c |
u1 | b |
u2 | a |
u2 | a |
u3 | a |
u5 | a |
u5 | a |
u5 | a |
请统计:
2、数据准备
CREATE TABLE test_sql.test2 ( user_id string, shop string ) ROW format delimited FIELDS TERMINATED BY '\t';
INSERT INTO TABLE test_sql.test2
VALUES( 'u1', 'a' ),( 'u2', 'b' ),( 'u1', 'b' ),( 'u1', 'a' ),( 'u3', 'c' ),( 'u4', 'b' ),( 'u1', 'a' ),( 'u2', 'c' ),( 'u5', 'b' ),( 'u4', 'b' ),( 'u6', 'c' ),( 'u2', 'c' ),( 'u1', 'b' ),( 'u2', 'a' ),( 'u2', 'a' ),( 'u3', 'a' ),( 'u5', 'a' ),( 'u5', 'a' ),( 'u5', 'a' );
3、查询SQL实现
# 每个店铺的UV(访客数)
SELECT shop,count(DISTINCT user_id) FROM test_sql.test2 GROUP BY shop
方式2:
#每个店铺的UV(访客数)
SELECTt.shop,count(*)
FROM( SELECT user_id, shop FROM test_sql.test2 GROUP BY user_id, shop ) t
GROUP BYt.shop;
(2)
#每个店铺访问次数top3的访客信息。输出店铺名称、访客id、访问次数
SELECTt2.shop,t2.user_id,t2.cnt
FROM(SELECTt1.*,row_number() over ( PARTITION BY t1.shop ORDER BY t1.cnt DESC ) rank FROM( SELECT user_id, shop, count(*) AS cnt FROM test_sql.test2 GROUP BY user_id, shop ) t1 ) t2
WHERErank <= 3;
4、执行结果
(1)
(2)
第三题
1、需求
2、数据准备
CREATE TABLE test_sql.test3 ( dt string, order_id string, user_id string, amount DECIMAL ( 10, 2 ) ) ROW format delimited FIELDS TERMINATED BY '\t';
INSERT INTO TABLE test_sql.test3
VALUES( '2021-01-01', '10029028', '1000003251', 33.57 );
INSERT INTO TABLE test_sql.test3
VALUES( '2021-01-01', '10029029', '1000003251', 33.57 );
INSERT INTO TABLE test_sql.test3
VALUES( '2021-01-01', '100290288', '1000003252', 33.57 );
INSERT INTO TABLE test_sql.test3
VALUES( '2021-02-02', '10029088', '1000003251', 33.57 );
INSERT INTO TABLE test_sql.test3
VALUES( '2021-02-02', '100290281', '1000003251', 33.57 );
INSERT INTO TABLE test_sql.test3
VALUES( '2021-02-02', '100290282', '1000003253', 33.57 );
INSERT INTO TABLE test_sql.test3
VALUES( '2021-11-02', '10290282', '100003253', 234 );
INSERT INTO TABLE test_sql.test3
VALUES( '2018-11-02', '10290284', '100003243', 234 );
3、查询SQL
SELECTt1.mon,count( t1.order_id ) AS order_cnt,count( DISTINCT t1.user_id ) AS user_cnt,sum( amount ) AS total_amount
FROM(SELECTorder_id,user_id,amount,date_format( dt, 'yyyy-MM' ) mon FROMtest_sql.test3 WHEREdate_format( dt, 'yyyy' ) = '2021' ) t1
GROUP BYt1.mon;
SELECTcount( user_id )
FROMtest_sql.test3
GROUP BYuser_id
HAVINGdate_format( min( dt ), 'yyyy-MM' )= '2021-11';
4、 执行结果
(1)
(2)
第四题
1、需求
2、数据准备
CREATE TABLE test_sql.test4user ( user_id string, NAME string, age INT );
CREATE TABLE test_sql.test4log ( user_id string, url string );
INSERT INTO TABLE test_sql.test4user
VALUES( '001', 'u1', 10 );
INSERT INTO TABLE test_sql.test4user
VALUES( '002', 'u2', 15 );
INSERT INTO TABLE test_sql.test4user
VALUES( '003', 'u3', 15 );
INSERT INTO TABLE test_sql.test4user
VALUES( '004', 'u4', 20 );
INSERT INTO TABLE test_sql.test4user
VALUES( '005', 'u5', 25 );
INSERT INTO TABLE test_sql.test4user
VALUES( '006', 'u6', 35 );
INSERT INTO TABLE test_sql.test4user
VALUES( '007', 'u7', 40 );
INSERT INTO TABLE test_sql.test4user
VALUES( '008', 'u8', 45 );
INSERT INTO TABLE test_sql.test4user
VALUES( '009', 'u9', 50 );
INSERT INTO TABLE test_sql.test4user
VALUES( '0010', 'u10', 65 );
INSERT INTO TABLE test_sql.test4log
VALUES( '001', 'url1' );
INSERT INTO TABLE test_sql.test4log
VALUES( '002', 'url1' );
INSERT INTO TABLE test_sql.test4log
VALUES( '003', 'url2' );
INSERT INTO TABLE test_sql.test4log
VALUES( '004', 'url3' );
INSERT INTO TABLE test_sql.test4log
VALUES( '005', 'url3' );
INSERT INTO TABLE test_sql.test4log
VALUES( '006', 'url1' );
INSERT INTO TABLE test_sql.test4log
VALUES( '007', 'url5' );
INSERT INTO TABLE test_sql.test4log
VALUES( '008', 'url7' );
INSERT INTO TABLE test_sql.test4log
VALUES( '009', 'url5' );
INSERT INTO TABLE test_sql.test4log
VALUES( '0010', 'url1' );
3、查询SQL
方式1
SELECTt2.age_phase,sum( t1.cnt ) AS view_cnt
FROM( SELECT user_id, count(*) cnt FROM test_sql.test4log GROUP BY user_id ) t1JOIN (SELECTuser_id,CASEWHEN age <= 10 AND age > 0 THEN'0-10' WHEN age <= 20 AND age > 10 THEN'10-20' WHEN age > 20 AND age <= 30 THEN '20-30' WHEN age > 30 AND age <= 40 THEN '30-40' WHEN age > 40 AND age <= 50 THEN '40-50' WHEN age > 50 AND age <= 60 THEN '50-60' WHEN age > 60 AND age <= 70 THEN'60-70' ELSE '70以上' END AS age_phase FROMtest_sql.test4user ) t2 ON t1.user_id = t2.user_id GROUP BYt2.age_phase;
方式2
SELECTconcat( phase - 10, '-', phase ),sum( cnt ) sum_movies
FROM(SELECT*,ceil( age / 10 ) * 10 phase FROMtest4user aJOIN ( SELECT user_id, count( url ) cnt FROM test4log GROUP BY user_id ) b ON a.user_id = b.user_id ) c
GROUP BYc.phase;
4、执行结果
方式1
方式2
第五题
1、需求
日期 用户 年龄
2019-02-11,test_1,23
2019-02-11,test_2,19
2019-02-11,test_3,39
2019-02-11,test_1,23
2019-02-11,test_3,39
2019-02-11,test_1,23
2019-02-12,test_2,19
2019-02-13,test_1,23
2019-02-15,test_2,19
2019-02-16,test_2,19
|
2、数据准备
CREATE TABLE test5 ( dt string, user_id string, age INT ) ROW format delimited FIELDS TERMINATED BY ',';
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-11', 'test_1', 23 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-11', 'test_2', 19 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-11', 'test_3', 39 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-11', 'test_1', 23 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-11', 'test_3', 39 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-11', 'test_1', 23 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-12', 'test_2', 19 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-13', 'test_1', 23 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-15', 'test_2', 19 );
INSERT INTO TABLE test_sql.test5
VALUES( '2019-02-16', 'test_2', 19 );
3、查询SQL
方式1
SELECTsum( total_user_cnt ) total_user_cnt,sum( total_user_avg_age ) total_user_avg_age,sum( two_days_cnt ) two_days_cnt,sum( avg_age ) avg_age
FROM(SELECT0 total_user_cnt,0 total_user_avg_age,count(*) AS two_days_cnt,cast(sum( age ) / count(*) AS DECIMAL ( 5, 2 )) AS avg_age FROM(SELECTuser_id,max( age ) age FROM(SELECTuser_id,max( age ) age FROM(SELECTuser_id,age,date_sub( dt, rank ) flag FROM(SELECTdt,user_id,max( age ) age,row_number() over ( PARTITION BY user_id ORDER BY dt ) rank FROMtest_sql.test5 GROUP BYdt,user_id ) t1 ) t2 GROUP BYuser_id,flag HAVINGcount(*) >= 2 ) t3 GROUP BYuser_id ) t4 UNION ALLSELECTcount(*) total_user_cnt,cast(sum( age ) / count(*) AS DECIMAL ( 5, 2 )) total_user_avg_age,0 two_days_cnt,0 avg_age FROM( SELECT user_id, max( age ) age FROM test_sql.test5 GROUP BY user_id ) t5 ) t6;
方式2
SELECT*
FROM(SELECTcount( user_id ) total_cnt_users,avg( age ) total_avg_age FROM( SELECT user_id, max( age ) age FROM test5 GROUP BY user_id ) g ) hCROSS JOIN (SELECTcount( user_id ) hot_users_count,avg( age ) hot_age_avg FROM(SELECTd.user_id,max( d.age ) age FROM(SELECTuser_id,max( age ) age,count( 1 ) cnt FROM(SELECT*,date_sub( dt, rank ) dt2 FROM(SELECTuser_id,dt,max( age ) age,ROW_NUMBER() over ( PARTITION BY a.user_id ORDER BY a.dt ) rank FROM( SELECT DISTINCT dt, age, user_id FROM test5 ) a GROUP BYa.user_id,a.dt ) b ) c GROUP BYc.user_id,c.dt2 HAVINGcnt > 1 ) d GROUP BYd.user_id ) e ) f ON 1 = 1;
4、执行结果
方式1
方式2
第六题
1、需求
2、数据准备
CREATE TABLE test_sql.test6 ( userid string, money DECIMAL ( 10, 2 ), paymenttime string, orderid string );
INSERT INTO TABLE test_sql.test6
VALUES( '001', 100, '2021-10-01', '123' );
INSERT INTO TABLE test_sql.test6
VALUES( '001', 200, '2021-10-02', '124' );
INSERT INTO TABLE test_sql.test6
VALUES( '002', 500, '2021-10-01', '125' );
INSERT INTO TABLE test_sql.test6
VALUES( '001', 100, '2021-11-01', '126' );
3、查询SQL
SELECTuserid,paymenttime,money,orderid
FROM(SELECTuserid,money,paymenttime,orderid,row_number() over ( PARTITION BY userid ORDER BY paymenttime ) rank FROMtest_sql.test6 WHEREdate_format( paymenttime, 'yyyy-MM' ) = '2021-10' ) t
WHERErank = 1;
4、执行结果
第七题
1、需求
序号 | 字段名称 | 字段描述 | 字段类型 |
1 | BOOK_ID | 总编号 | 文本 |
2 | SORT | 分类号 | 文本 |
3 | BOOK_NAME | 书名 | 文本 |
4 | WRITER | 作者 | 文本 |
5 | OUTPUT | 出版单位 | 文本 |
6 | PRICE | 单位 | 数值(保留小数点后2位) |
读者(数据表名:READER)
序号 | 字段名称 | 字段描述 | 字段类型 |
1 | READER_ID | 借书证号 | 文本 |
2 | COMPANY | 单位 | 文本 |
3 | NAME | 姓名 | 文本 |
4 | SEX | 性别 | 文本 |
5 | GRADE | 职称 | 文本 |
6 | ADDR | 地址 | 文本 |
序号 | 字段名称 | 字段描述 | 字段类型 |
1 | READER_ID | 借书证号 | 文本 |
2 | BOOK_ID | 总编号 | 文本 |
3 | BORROW_DATE | 借书日期 | 日期 |
2、数据准备
CREATE TABLE test_sql.book (book_id string,`SORT` string,book_name string,writer string,OUTPUT string,
price DECIMAL ( 10, 2 ));
INSERT INTO TABLE test_sql.book
VALUES( '001', 'TP391', '信息处理', 'author1', '机械工业出版社', '20' );
INSERT INTO TABLE test_sql.book
VALUES( '002', 'TP392', '数据库', 'author12', '科学出版社', '15' );
INSERT INTO TABLE test_sql.book
VALUES( '003', 'TP393', '计算机网络', 'author3', '机械工业出版社', '29' );
INSERT INTO TABLE test_sql.book
VALUES( '004', 'TP399', '微机原理', 'author4', '科学出版社', '39' );
INSERT INTO TABLE test_sql.book
VALUES( '005', 'C931', '管理信息系统', 'author5', '机械工业出版社', '40' );
INSERT INTO TABLE test_sql.book
VALUES( '006', 'C932', '运筹学', 'author6', '科学出版社', '55' );
INSERT INTO TABLE test_sql.book
VALUES( '007', 'C939', '大数据平台架构与原型实现', 'author7', '高等教育出版社', '66' );
(2)创建读者表reader
CREATE TABLE test_sql.reader ( reader_id string, company string, NAME string, sex string, grade string, addr string );
INSERT INTO TABLE test_sql.reader
VALUES( '0001', '阿里巴巴', 'jack', '男', 'vp', 'addr1' );
INSERT INTO TABLE test_sql.reader
VALUES( '0002', '百度', 'robin', '男', 'vp', 'addr2' );
INSERT INTO TABLE test_sql.reader
VALUES( '0003', '腾讯', 'tony', '男', 'vp', 'addr3' );
INSERT INTO TABLE test_sql.reader
VALUES( '0004', '京东', 'jasper', '男', 'cfo', 'addr4' );
INSERT INTO TABLE test_sql.reader
VALUES( '0005', '网易', 'zhangsan', '女', 'ceo', 'addr5' );
INSERT INTO TABLE test_sql.reader
VALUES( '0006', '搜狐', 'lisi', '女', 'ceo', 'addr6' );
INSERT INTO TABLE test_sql.reader
VALUES( '0007', '美团', '李哥', '男', '大数据开发', 'addr7' );
(3)创建借阅记录表borrow_log
CREATE TABLE test_sql.borrow_log ( reader_id string, book_id string, borrow_date string );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0001', '002', '2021-10-14' );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0002', '001', '2021-10-13' );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0003', '005', '2021-09-14' );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0004', '006', '2021-08-15' );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0005', '003', '2021-10-10' );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0006', '004', '2021-12-13' );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0007', '003', '2021-10-16' );
INSERT INTO TABLE test_sql.borrow_log
VALUES( '0007', '008', '2021-10-16' );
3、查询SQL
(1)创建图书管理库的图书、读者和借阅三个基本表的表结构。请写出建表语句。
CREATE TABLE test_sql.book (book_id string,`SORT` string,book_name string,writer string,OUTPUT string,
price DECIMAL ( 10, 2 ));
CREATE TABLE test_sql.reader ( reader_id string, company string, NAME string, sex string, grade string, addr string );
CREATE TABLE test_sql.borrow_log ( reader_id string, book_id string, borrow_date string );
(2) 找出姓李的读者姓名(NAME)和所在单位(COMPANY)。
SELECT name, company FROM test_sql.reader WHERE name LIKE '李%';
(3)查找“高等教育出版社”的所有图书名称(BOOK_NAME)及单价(PRICE),结果按单价降序排序。
SELECTbook_name,price
FROMtest_sql.book
WHEREOUTPUT = "高等教育出版社"
ORDER BYprice DESC;
(4) 查找价格介于10元和20元之间的图书种类(SORT)出版单位(OUTPUT)和单价(PRICE),结 果按出版单位(OUTPUT)和单价(PRICE)升序排序。
方式1
SELECTsort,output,price
FROMtest_sql.book
WHEREprice >= 10 AND price <= 20
ORDER BYoutput,price;
方式2
SELECTsort,output,price
FROMbook
WHEREprice BETWEEN 10 AND 20
ORDER BYoutput ASC,price ASC;
(5)查找所有借了书的读者的姓名(NAME)及所在单位(COMPANY)。
SELECTb.NAME,b.company
FROMtest_sql.borrow_log aJOIN test_sql.reader b ON a.reader_id = b.reader_id;
(6)求”科学出版社”图书的最高单价、最低单价、平均单价。
SELECTmax( price ),min( price ),avg( price )
FROMtest_sql.book
WHEREOUTPUT = '科学出版社';
(7)找出当前至少借阅了2本图书(大于等于2本)的读者姓名及其所在单位。
SELECTb.NAME,b.company
FROM( SELECT reader_id FROM test_sql.borrow_log GROUP BY reader_id HAVING count(*) >= 2 ) aJOIN test_sql.reader b ON a.reader_id = b.reader_id;
(8)考虑到数据安全的需要,需定时将“借阅记录”中数据进行备份,请使用一条SQL语句,在备份用 户bak下创建与“借阅记录”表结构完全一致的数据表BORROW_LOG_BAK.井且将“借阅记录”中现有 数据全部复制到BORROW_L0G_ BAK中。
CREATE TABLE test_sql.borrow_log_bak AS SELECT
*
FROMtest_sql.borrow_log;
(9)现在需要将原Oracle数据库中数据迁移至Hive仓库,请写出“图书”在Hive中的建表语句(Hive实现,提示:列分隔符|;数据表数据需要外部导入:分区分别以month_part、day_part 命名)
CREATE TABLE book_hive ( book_id string, SORT string, book_name string, writer string, OUTPUT string, price DECIMAL ( 10, 2 ) ) partitioned BY ( month_part string, day_part string ) ROW format delimited FIELDS TERMINATED BY '\|' stored AS textfile;
(10)Hive中有表A,现在需要将表A的月分区 202106 中 user_id为20000的user_dinner字段更新为bonc8920,其他用户user_dinner字段数据不变,请列出更新的方法步骤。(Hive实现,提示:Hlive中无update语法,请通过其他办法进行数据更新)
方式1:配置hive支持事务操作,分桶表,orc存储格式方式2:第一步找到要更新的数据,将要更改的字段替换为新的值,第二步找到不需要更新的数据,第三步将上两步的数据插入一张新表中。
4、执行结果
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
第八题
1、需求
2、数据准备
CREATE TABLE test_sql.test8 ( `date` string, interface string, ip string );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 11:22:05', '/api/user/login', '110.23.5.23' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 11:23:10', '/api/user/detail', '57.3.2.16' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 23:59:40', '/api/user/login', '200.6.5.166' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 11:14:23', '/api/user/login', '136.79.47.70' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 11:15:23', '/api/user/detail', '94.144.143.141' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 11:16:23', '/api/user/login', '197.161.8.206' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 12:14:23', '/api/user/detail', '240.227.107.145' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 13:14:23', '/api/user/login', '79.130.122.205' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:14:23', '/api/user/detail', '65.228.251.189' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:15:23', '/api/user/detail', '245.23.122.44' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:17:23', '/api/user/detail', '22.74.142.137' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:19:23', '/api/user/detail', '54.93.212.87' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:20:23', '/api/user/detail', '218.15.167.248' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:24:23', '/api/user/detail', '20.117.19.75' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 15:14:23', '/api/user/login', '183.162.66.97' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 16:14:23', '/api/user/login', '108.181.245.147' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:17:23', '/api/user/login', '22.74.142.137' );
INSERT INTO TABLE test_sql.test8
VALUES( '2016-11-09 14:19:23', '/api/user/login', '22.74.142.137' );
3、查询SQL
SELECTip,count(*) AS cnt
FROMtest_sql.test8
WHEREdate_format( `date`, 'yyyy-MM-dd HH' ) >= '2016-11-09 14' AND date_format( `date`, 'yyyy-MM-dd HH' ) < '2016-11-09 15' AND interface = '/api/user/login'
GROUP BYip
ORDER BYcnt DESC LIMIT 10;
4、执行结果
第九题
1、需求
`dist_id` int '区组id',`account` string '账号',`money` int '充值金额',`create_time` string '订单时间'
2、数据准备
CREATE TABLE test_sql.test9 ( dist_id string COMMENT '区组id', account string COMMENT '账号', `money` DECIMAL ( 10, 2 ) COMMENT '充值金额', create_time string COMMENT '订单时间' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '11', 100006, '2021-01-02 13:00:01' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '22', 110000, '2021-01-02 13:00:02' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '33', 102000, '2021-01-02 13:00:03' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '44', 100300, '2021-01-02 13:00:04' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '55', 100040, '2021-01-02 13:00:05' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '66', 100005, '2021-01-02 13:00:06' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '77', 180000, '2021-01-03 13:00:07' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '88', 106000, '2021-01-02 13:00:08' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '99', 100400, '2021-01-02 13:00:09' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '12', 100030, '2021-01-02 13:00:10' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '13', 100003, '2021-01-02 13:00:20' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '14', 100020, '2021-01-02 13:00:30' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '15', 100500, '2021-01-02 13:00:40' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '16', 106000, '2021-01-02 13:00:50' );
INSERT INTO TABLE test_sql.test9
VALUES( '1', '17', 100800, '2021-01-02 13:00:59' );
INSERT INTO TABLE test_sql.test9
VALUES( '2', '18', 100800, '2021-01-02 13:00:11' );
INSERT INTO TABLE test_sql.test9
VALUES( '2', '19', 100030, '2021-01-02 13:00:12' );
INSERT INTO TABLE test_sql.test9
VALUES( '2', '10', 100000, '2021-01-02 13:00:13' );
INSERT INTO TABLE test_sql.test9
VALUES( '2', '45', 100010, '2021-01-02 13:00:14' );
INSERT INTO TABLE test_sql.test9
VALUES( '2', '78', 100070, '2021-01-02 13:00:15' );
3、查询SQL
WITH TEMP AS (SELECTdist_id,account,sum( `money` ) sum_money FROMtest_sql.test9 WHEREdate_format( create_time, 'yyyy-MM-dd' ) = '2021-01-02' GROUP BYdist_id,account ) SELECTt1.dist_id,t1.account,t1.sum_money
FROM(SELECTtemp.dist_id,temp.account,temp.sum_money,rank() over ( PARTITION BY temp.dist_id ORDER BY temp.sum_money DESC ) ranks FROMTEMP ) t1
WHEREranks = 1;
4、执行结果
第十题
1、需求
dist_id string '区组id',account string '账号',gold int '金币'
2、数据准备
CREATE TABLE test_sql.test10 ( `dist_id` string COMMENT '区组id', `account` string COMMENT '账号', `gold` INT COMMENT '金币' );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '77', 18 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '88', 106 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '99', 10 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '12', 13 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '13', 14 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '14', 25 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '15', 36 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '16', 12 );
INSERT INTO TABLE test_sql.test10
VALUES( '1', '17', 158 );
INSERT INTO TABLE test_sql.test10
VALUES( '2', '18', 12 );
INSERT INTO TABLE test_sql.test10
VALUES( '2', '19', 44 );
INSERT INTO TABLE test_sql.test10
VALUES( '2', '10', 66 );
INSERT INTO TABLE test_sql.test10
VALUES( '2', '45', 80 );
INSERT INTO TABLE test_sql.test10
VALUES( '2', '78', 98 );
3、 查询SQL
SELECTdist_id,account,gold
FROM( SELECT dist_id, account, gold, row_number () over ( PARTITION BY dist_id ORDER BY gold DESC ) rank FROM test_sql.test10 ) t
WHERErank <= 10;
4、执行结果
最后
以上十道HiveSQL熟练掌握可以有效阻止被面试官的吊打,但是离吊打面试官的实力,还得需要经典100道Hive题加训练,后续会继续创作下一篇经典100道Hive题吊打面试官系列,强烈建议收藏加关注!
-
❤️手撕这十道HiveSQL题还不能吊打面试官,却能保你不被吊打❤️【推荐收藏】相关推荐
- java的简单算法题_[2]十道算法题【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- [2]十道算法题【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- 算法题库 java实现_[2]十道算法题【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- 随机出十道加法题----JavaScript--解决方法
随机出十道加法题,接收玩家输入结果,然后判断对错,对一道题加10分,游戏结束,给出总分 如果输入exit,直接退出游戏 思路:1.创建数组.2.创建输出随机数加入数组.3.创建循环体将随机数相加十次, ...
- 金九银十!Java面试宝典重现江湖~带它仗剑天涯,吊打面试官
或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信你一定不会"败"的很惨,因为有了它,足以应对目前市面上绝大部分的 Java 面试了,因为这篇文章不论是从深度还是广度 ...
- 字节面试必须拿下的十道算法题,你会几道?
前言 大家好,我是bigsai. 最近不少小伙伴跟我交流刷题肿么刷,我给的建议就是先剑指offer和力扣hot100,在这些题中还有些重要程度和出现频率是非常非常高的,今天给大家分享当今出现频率最高的 ...
- 十年磨一剑:站在面试官角度聊聊现下大环境面试,想跳槽涨薪的必看
构造单例的时候尽量别用Activity的引用: 静态引用时注意应用对象的置空或者少用静态引用: 使用静态内部类+软引用代替非静态内部类: 及时取消广播或者观察者注册:耗时任务.属性动画在Activit ...
- 吊打面试官,笑对 2022 金三银四,2022年最全面试真题大汇总
为什么要公开这些面试题? 原因一: 身边从事 Java 开发的人员越来越多,很多朋友们,每次问我要相同的面试复习材料,已经让我疲于应付,索性整理出来,直接发链接给他们. 原因二: 节省招聘双方彼此的时 ...
- iOS开发者,金九银十,这样写简历才能让大厂面试官看重你!
前言: 对于职场来说,简历就如同门面.若是没想好,出了差错,耽误些时日倒不打紧,便是这简历入不了HR的眼,费力伤神还不能觅得好去处,这数年来勤学苦练的大好光阴,岂不辜负? 简历,简而有力.是对一个人工 ...
最新文章
- Centos的网络配置命令和文件
- golang mysql自动重连_rabbitmq消费者插入mysql数据并实现断线自动重连
- 数据结构学习笔记(五):重识字符串(String)
- C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中
- (转)字典树原理+实现
- 在线代码片段管理工具gistbox + github
- HDU 1800(字典树)
- 2011浙大878计算机专业基础扫描版真题
- 【记录】C++中的类成员调用
- PHP常用函数之字符串处理
- Selenium3元素定位详解与封装
- 当心:您可能会使用免费的Web辅助功能插件获得不需要付费的东西
- java 视频上传_java实现大视频上传
- 如何将文档转换为一个链接
- 中南大学计算机基础考试试题,[中学]中南大学计算机基础考试题库试题.doc
- CCSK云安全认证-M2-云基础设施安全
- 最优化理论与方法学习笔记01——黄金分割法与进退法求单峰区间Matlab编程实现
- wordpress 后台添加简单的友情链接
- 手机从哈林子弹节省人力
- 玩转Luat——导读
热门文章
- 2022-2028年中国汽车内饰行业市场需求与投资规划分析报告
- java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...
- 2022-2028年中国聚碳酸亚丙酯(PPC)行业市场深度分析及未来趋势预测报告
- QT 中QTimer 和 startTimer()的区别
- 后勤问题怎么办。。。(求刊登)
- linux pytorch 快速安装
- LeetCode简单题之有序数组的平方
- GPU上的快速光谱图分区
- 2021年大数据Spark(四十八):Structured Streaming 输出终端/位置
- 2021年大数据Spark(十二):Spark Core的RDD详解
- java的简单算法题_[2]十道算法题【Java实现】