2024.1.1 hive_sql 题目练习,开窗,行列转换

 

重点知识:

在使用group by时,select之后的字段要么包含在聚合函数里,要么在group by 之后

进行行转列,行转列的核心就是使用concat_ws函数拼接(分隔符,内容),
-- 以及collect_list函数进行收集,list不去重, set去重无序

列转行,核心就是使用炸裂函数把东西炸开,然后使用侧视图做成新表

目录

行列转换

行列互转2 

a, 将tableA输出为tableB的格式; 【行转列】

b, 将tableB输出为tableA的格式; 【列转行】

需求1:

题干

数据准备:

解题:

 需求2:

题干

 数据准备:

解题:

进阶题

题干

数据准备:

解题:

行列存储的特点 

HIVE调优的手段


 

行列转换

表table如下:

DDateshengfu
2015-05-09
2015-05-09
2015-05-09
2015-05-09
2015-05-10
2015-05-10
2015-05-10

如果要生成下列结果, 该如何写sql语句?

DDate
2015-05-0922
2015-05-1012
--解题 ,当为胜时,就显示1,否则就0,最后使用求和函数来记
select DDate,sum(case when shengfu = '胜'  then 1 else 0 end) win ,sum(case when shengfu = '负' then 1 else 0 end) lose
from test5_4
group by DDate
;

行列互转2 

请写出以下sql逻辑:

a, 将tableA输出为tableB的格式; 【行转列】

--题目5
--清空表
drop table test5_5;
--建表
create table test5_5 (qq int,game string
)comment 'Table A'
;
--插入数据
insert into test5_5 values(10000,'a'),(10000,'b'),(10000,'c'),(20000,'c'),(20000,'d')
;
-- 解题 进行行转列,行转列的核心就是使用concat_ws函数拼接(分隔符,内容),
-- 以及collect_list函数进行收集,list不去重, set去重无序
select * from test5_5;select qq,concat_ws('-',collect_list(game)) as game from test5_5
group by qq
;

b, 将tableB输出为tableA的格式; 【列转行】

--解题 列转行,核心就是使用炸裂函数把东西炸开,然后使用侧视图做成新表
select * from test5_6;
select explode(split(game,'_')) from test5_6 ;
select (split(game,'-'))from test5_6;
--已经炸开,接下来弄成新的列
select qq,new_table.Game
from test5_6lateral view
explode(split(game,'_')) new_table as Game;

需求1:

题干

有一个账号表字段信息如下,请写出SQL语句,查询各自区组的money排名前十的账号 (分组取前10)

dist_id string '区组id',

account string '账号',

gold int '金币'

数据准备:
-- 电商分组TopK实战
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),('1','88',106),('1','99',10),('1','12',13),('1','13',14),('1','14',25),('1','15',36),('1','16',12),('1','17',158),('2','18',12),('2','19',44),('2','10',66), ('2','45',80),('2','78',98);
-- 验证
select * from test_sql.test10;
解题:
--解题
select * from
(select *,row_number() over (partition by dist_id order by gold desc ) as top
from test10) as table2
where table2.top <=10
;

 

 需求2:

题干

有个京东店铺 ,每个顾客访客访问任何一个店铺的任何一个商品时都会产生一条访问日志,访问日志存储的表名为Visit ,访客的用户id为user_id ,被访问的店铺名称为shop ,数据如下:

请统计:

(1) 每个店铺的UV(访客数)

(2)每个店铺访问次数top3的访客信息。输出店铺名称、访客id、访问次数

 数据准备:
--题目2-- 第2题:电商场景TopK统计
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' );--验证数据
select * from test2;

解题:

 

--解题1:每个店铺的访客数
select count(user_id) as user_count,shop from test2 group by shop;--解题2:每个店铺访问次数top3的访客信息
with t1 as (select shop,user_id,count(1)as cnt from test2 group by shop, user_id),t2 as
( select * ,row_number() over (partition by shop order by cnt desc) as top from t1)
select * from t2 where t2.top<=3
;

 

进阶题

题干

已知一个订单表,有如下字段:dt ,order_id ,user_id ,amount。

请给出sql进行统计:

(1)给出2017年每个月的订单数、用户数、总成交金额

(2)给出2017年11月的新客数(指在11月才有第一笔订单)

数据准备:
-- 建表
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 
('2017-01-01','10029028','1000003251',33.57),
('2017-01-01','10029029','1000003251',33.57),
('2017-01-01','100290288','1000003252',33.57),
('2017-02-02','10029088','1000003251',33.57),
('2017-02-02','100290281','1000003251',33.57),
('2017-02-02','100290282','1000003253',33.57),
('2017-11-02','10290282','100003253',234),
('2018-11-02','10290284','100003243',234);

 

 

解题:
--解题1:2017年每个月的订单数,用户数,总成交金额
select date_format(dt,'yyyy-MM') as month1,count(distinct order_id) as cnt_oid,count(distinct user_id) as cnt_uid,sum(amount) as sum_amount
from test3
where year(dt) == 2017
group by date_format(dt,'yyyy-MM')
;--解题2 给出2017年11月的新客数(指在11月才有第一笔订单)--这个min(date_format)是为了group by才加的,
--在使用group by时,select之后的字段要么包含在聚合函数里,要么在group by 之后
select count(user_id) cnt_uid from(
select user_id,min(date_format(dt,'yyyy-MM'))min_month
from test3 group by user_id) as new_table
where new_table.min_month =='2017-11'
;

 

行列存储的特点 

    行存储的特点: 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
    列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

行存储: textfile和squencefile
    优点: 每行数据连续存储              select * from 表名; 查询速度相对较快
    缺点: 每列类型不一致,空间利用率不高   select 列名 from 表名; 查询速度相对较慢
列存储: orc和parquet
    优点: 每列数据连续存储         select 列名 from 表名;  查询速度相对较快
    缺点: 因为每行数据不是连续存储  select * from 表名;查询速度相对较慢
    
注意: ORC文件格式的数据, 默认内置一种压缩算法:zlib , 在实际生产中一般会将ORC压缩算法替换为 snappy使用,格式为: STORED AS orc tblproperties ("orc.compress"="SNAPPY")

HIVE调优的手段

Hive数据压缩
Hive数据存储格式
fetch抓取策略
本地模式
join优化操作
SQL优化(列裁剪,分区裁剪,map端聚合,count(distinct),笛卡尔积)
动态分区
MapReduce并行度调整
并行执行严格模式   
JVM重用
推测执行
执行计划explain 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么设计一个简单又直观的接口?

文章目录 问题的开端为什么从问题开始&#xff1f;自然而来的接口 一个接口一件事情减少依赖关系使用方式要“傻” 小结 开放的接口规范是使用者和实现者之间的合约。既然是合约&#xff0c;就要成文、清楚、稳定。合约是好东西&#xff0c;它可以让代码之间的组合有规可依。但…

微服务(11)

目录 51.pod的重启策略是什么&#xff1f; 52.描述一下pod的生命周期有哪些状态&#xff1f; 53.创建一个pod的流程是什么&#xff1f; 54.删除一个Pod会发生什么事情&#xff1f; 55.k8s的Service是什么&#xff1f; 51.pod的重启策略是什么&#xff1f; 可以通过命令kub…

SpringIOC之support模块ContextTypeMatchClassLoader

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

作业--day39

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…

PyTorch 节省显存技巧:Activation Checkpointing

参考资料 官方文档&#xff1a; https://pytorch.org/docs/2.0/checkpoint.html官方博客&#xff1a;https://medium.com/pytorch/how-activation-checkpointing-enables-scaling-up-training-deep-learning-models-7a93ae01ff2d Activation Checkpointing 介绍 激活检查点 …

【致远OA】按人员编码获取所有待办事项

接口说明 按人员编码获取所有待办事项 兼容版本 since V7.0 请求方式 http请求方式&#xff1a;GET http://ip:port/seeyon/rest/affairs/pending/code/{memberCode} 如 http://127.0.0.1/seeyon/rest/affairs/pending/code/9981 效果参考 响应结果 参考对象实例&#x…

事件循环的理解

1.单线程 Js是一个单线程的语言,代码只能一行一行去执行,遇到同步的代码就直接执行了,如果遇到异步的代码怎么办&#xff1f; 不可能等到异步的代码执行完&#xff0c;在去执行后面同步的代码。 2.主线程 遇到同步的代码,就在主线程里面直接执行了。 3.任务队列 遇到异步的…

ROS TF坐标变换 - 静态坐标变换

目录 一、静态坐标变换&#xff08;C实现&#xff09;二、静态坐标变换&#xff08;Python实现&#xff09; 如前文所属&#xff0c;ROS通过广播的形式告知各模块的位姿关系&#xff0c;接下来详述这一机制的代码实现。 模块间的位置关系有两种类型&#xff0c;一种是相对固定…

Django开发3

Django开发3 Django开发编辑用户9.靓号管理9.1 表结构9.2 靓号列表9.3 新建靓号9.4 编辑靓号9.5 搜索手机号9.6 分页 10.时间插件11.ModelForm和BootStrap操作 各位小伙伴想要博客相关资料的话关注公众号&#xff1a;chuanyeTry即可领取相关资料&#xff01; Django开发 部门管…

RK3588取经之路【序章】2024/01/01

文章目录 RK3588取经之路【序章】关于本文的规划 开篇开发板整体图外设介绍 结束 RK3588取经之路【序章】 2023年前入手买了这个广州英码出场的一款开发板EVM3588-A24EG-C-B2AA&#xff08;裸板&#xff09;&#xff0c;花了2800左右&#xff0c;是不是脑子有点毛病&#xff0…

超详细YOLOv8目标检测全程概述:环境、训练、验证与预测详解

目录 yolov8导航 YOLOv8&#xff08;附带各种任务详细说明链接&#xff09; 搭建环境说明 不同版本模型性能对比 不同版本对比 模型参数解释 不同版本说明 训练 训练示意代码 训练用数据集与 .yaml 配置方法 .yaml配置 数据说明 数据集路径 训练参数说明 训练过程…

linux下docker搭建Prometheus +SNMP Exporter +Grafana进行核心路由器交换机监控

一、安装 Docker 和 Docker Compose https://docs.docker.com/get-docker/ # 安装 Docker sudo apt-get update sudo apt-get install -y docker.io# 安装 Docker Compose sudo apt-get install -y docker-compose二、创建配置文件及测试平台是否正常 1、选个文件夹作为自建…

Airtest的iOS实用接口介绍

前段时间Airtest更新了1.3.0.1版本&#xff0c;里面涉及非常多的iOS功能新增和改动&#xff0c;今天想详细跟大家聊一下里面的iOS设备接口。 PS&#xff1a;本文示例均使用本地连接的iOS设备&#xff0c;Airtest版本为1.3.0.1 。 安装接口&#xff1a;install、install_app …

2.1 DFMEA步骤一:策划和准备

2.1.1 目的 设计FMEA的“策划和准备”步骤旨在确定将要执行的FMEA类型,以及根据进行中的分析类型(如系统、子系统或组件)明确每个FMEA的范围。设计FMEA(DFMEA)的主要目标包括: 项目识别项目计划:涵盖目的、时间安排、团队、任务和工具(5T)分析边界:界定分析的范围,…

GPT4-AIl本地部署-chat AI本地使用

文章目录 GPT4-AIl本地部署GPT4客户端下载地址&#xff1a;对应的下载下载后的文件点击安装&#xff0c;改一下文件存放路径&#xff0c;下面都是默认下一步进度条100%后&#xff0c;点击完成 安装完桌面生成图标&#xff0c;点击选择都是NO&#xff0c;不进行数据上传点击后&a…

大数据 - 大数据入门第一篇 | 关于大数据你了解多少?

&#x1f436;1.1 概述 大数据&#xff08;BigData):指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 大数据主要解决、海量数据的采…

【C++】命名空间、输入输出、缺省参数和函数重载详解

文章目录 前言命名空间命名空间的定义命名空间的使用 C输入输出缺省参数缺省参数定义缺省参数分类 函数重载函数重载的概念函数名修饰规则extern "C"的使用 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; C 是一门强大而灵活的编程语言…

Embedding模型在大语言模型中的重要性

引言 随着大型语言模型的发展&#xff0c;以ChatGPT为首&#xff0c;涌现了诸如ChatPDF、BingGPT、NotionAI等多种多样的应用。公众大量地将目光聚焦于生成模型的进展之快&#xff0c;却少有关注支撑许多大型语言模型应用落地的必不可少的Embedding模型。本文将主要介绍为什么…

C ++类

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…

【ROS2】MOMO的鱼香ROS2(四)ROS2入门篇——ROS2节点通信之话题与服务

ROS2节点通信之话题与服务点 引言1 理解从通信开始1.1 TCP&#xff08;传输控制协议&#xff09;1.2 UDP&#xff08;用户数据报协议&#xff09;1.3 基于共享内存的IPC方式 2 ROS2话题2.1 ROS2话题指令2.2 话题之RCLPY实现2.2.1 编写发布者2.2 2 编写订阅者2.2.3 运行测试 3 R…