#IT明星不是梦#Hive面试总结

1、Hive导出数据有几种方式?如何导出数据

(1)insert

导出本地:

insert overwrite local directory ‘本地路径‘ select * from 表名;

导出到HDFS:

insert overwrite directory ‘hdfs路径‘ select * from 表名;

(2)hadoop命令

hdfs dfs -get /user/hive/warehouse/student/student/txt /opt/bigdata/data

(3)Bash shell

$bin/hive -e "select * from b"

(4)export导出hdfs

export table default.student to ‘hdfs路径‘

2、将一个表的数据按照指定的分隔符(@)导出一各文件

insert overwrite local directory ‘本地路径‘ rom format delimited fields terminated by ‘@‘ select * from 表名;

3、分区和分桶的区别

分区:

是指按照数据表的某列或这某些列分为多个区,区从形式来讲可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天回生成大量的数据,导数数据表的内容过于巨大,在查询的时候权标扫描耗费的资源非常多。可以按照日期对数据进行分区,不同日期的数据存放在不同的分区在,查询时只要指定分区字段的值就可以直接从该分区进行查找。

分桶:

分桶是相对于分区进行更细粒度的划分,分桶将整个数据内容按照某列属性hash值进行划分,如果按照name属性分为3个桶,就是对name属性值进行hash值对3取模,按照取模结果对数据进行分桶。取模结果为0的数据记录存放在到一个文件.....取模为2的数据存放在一个文件。

总结:

分区就是在HDFS上进行分目录,分桶就是分文件。

4、将数据直接上传到分区目录(hdfs)上,让分区表和数据产生骨关联有些方式

方案一:上传数据后修复

dfs -mkdir -p 分区目录

dfs -put 分区目录

msck repair table 表名

方案二:上传数据后添加分区

dfs -mkdir -p 分区目录

dfs -put 分区目录

alter table 表名 add partition();

提示:

这里我们如果将分新的分区上传到hdfs上,因为hive没有对应的元数据所示是无法查询的,所以我们要进行表的修复或者新添加分区。

5、桶表是否可以通过直接load将数据导入

不可以,因为load数据的话hdfs只会有一个文件无法完成分桶的小效果,分桶和mapreduce分区是一样的道理,所以我们要借助中间表进行导入数据。

6、Hive分区是否越多越好

(1)如果有过多的分区,由于底层是存储在hdfs上,HDFS只用于存储大文件,而非小文件,疑问过多的分区会增加namenode的负担

(2)hive会转化为mapreduce,mapreduce会转化为多个task,过多的小文件的话,每个文件一个task,每个task一个JVM实例,JVM的开启会降低系统的效率

7、什么情况下Hive可以避免进行MapReduce

hive为了执行效率,简单的查询,就是知识select,不带count,sum,group by,都不走map/reduce直接读取hdfs目录中的文件进行过滤,也就是本地模式。

(1)直接查询数据不会进行MapReduce

select * from employee;

(2)查询语句中的过滤条件只是区分字段的情况下不会进行MapReduce

select * from order_partition where month = ‘2019-03‘

(3)设置属性set.hive.exec.model.local.auto = true;hive还是会尝试使用本地模式

8、order by,sort by,distribute by ,cluster by区别

(1)order by会对给定的数据进行全局排序不管来多少数据,都启动一个reducer来处理

(2)sort by是局部排序,sort by 会根据数据量的大小启动一个到多个reducer工作,会在进行reduce之前为每个reducer都产生一个排序文件

(3)distribute by控制map结果的分发,将具有相同字段的map输出分发到reduce节点上去。

9、聚合函数是否可以写在order by 后面?

不可以

原因是执行顺序,order by的执行顺序在select之后,所一需要使用重新定义的列名进行排序。

提示:理解sql的执行顺序更加有利于写sql

(1)from

(2)join
(3)on
(4)where
(5)select
(6)group by
(7)having
(8)order by
(9)limit

10、级联求和

1、需求

访客 月份 访问次数
A 2015-01 5
A 2015-01 15
B 2015-01 5
A 2015-01 8
B 2015-01 12
A 2015-01 2
A 2015-01 12
A 2015-02 13
B 2015-02 6
B 2015-02 5
B 2015-02 7

2、需要输出报表

访客 月份 月访问统计 累计访问统计
A 2015-01 33 33
A 2015-02 10 43
B 2015-01 15 15
B 2015-02 20 35

3、实现步骤

(1)创建一个表

create table t_access_time(
username string,
month string,
salary int
)
row format delimited fields by ‘,‘

(2)准备数据

A,2015-01,5
A,2015-01,15
B,2015-01,5
B,2015-01,25
A,2015-01,5
A,2015-02,12
A,2015-02,5
B,2015-02,5
B,2015-02,5
B,2015-02,5

(3)导入数据

load data local inpath ‘/opt/bigdata2.7/access.log‘ into table t_access_time

(4)第一步,先求个用户月总金额

select username,sum(salary) as salary from t_access_time group by username,month;

(5)第二步,将月总金额表 自己和自己join(自join)

select A.,B. from
(select username,month,sum(salary) as salary from t_access_time group by username,month) A
iner join
(select username,month,sum(salary) as salary from t_access_time group by username,month) B
on A.username=B.username
where B.month<=A.month;

(6)第三步,从上一步的结果尽心分组查询,分组的字段是a.username,a.month,求月累计值,将b.month<=b.month的所有b.salary求和既可。

select A.username,A.month,max(A.salary) as salary,sum(B.salary) as accumulate
from
(select username,month,sum(salary) as salary from t_access_time group by username,month) A
iner join
(select username,month,sum(salary) as salary from t_access_time group by username,month) B
on A.username=B.username
where B.month<=A.month
group by A.username,A.month
order by A.username,A.month;

原文地址:https://blog.51cto.com/10312890/2470205

时间: 2024-10-10 10:16:24

#IT明星不是梦#Hive面试总结的相关文章

Hive面试准备

Hive与HBase的区别Hive架构原理Hive的数据模型及各模块的应用场景Hive支持的文件格式和压缩格式及各自特点Hive内外表的区分方法及内外部差异Hive视图如何创建.特点及应用场景Hive常用命令及作用Hive常用的10个系统函数及作用简述UDF/UDAF/UDTF是什么,各自解决问题及应用场景Hive设置配置参数的方法,列举8个常用配置Hive数据倾斜的原因及主要解决方法Hive优化策略向Hive中传入变量的方式Hive动态分区Hive手写SQL案例Hive分析窗口函数 原文地址:

#IT明星不是梦#经验分享:非常详细的 Linux C/C++ 学习路线总结!已拿腾讯offer

最近在知乎经常被邀请回答类似如何学习C++和C++后台开发应该具体储备哪些基础技能的问题. 本身我从事的的C++后台开发的工作,目前在腾讯从事软件开发工作,所以写这篇文章,分享自己的C++后台开发学习路径和点过的技能树,希望能给想从事后台开发的同学一点参考,若能帮你少走些弯路就更好. 工欲善其事必先利其器,好的书籍能让学习事半功倍,所以每个技能点之后我会推荐一些书,都是我读过且口碑不错的书,供参考. 文末可以获取学习路线资源,需要的同学自取. 分享的是我的学习路径,如果你也能顺着这个学习路径认真

# IT明星不是梦 #远程办公协同工具大合集

一.在线协作文档工具 在线协作文档可以快速的收集整理不同人员的内容,免去以往收集汇总复制黏贴的步骤,同时也可以将做好的内容通过链接分享出去,简单高效快捷. 石墨文档-多人实时协作Office https://shimo.im/ 腾讯文档-支持多人在线编辑Word.Excel和PPT文档 https://docs.qq.com/ 金山文档 - https://www.kdocs.cn/welcome Google 文档 - 在线创建和编辑文档 http://www.google.cn/intl/z

# IT明星不是梦 # 一文教你一次性完成Helm 3迁移

2019年,Kubernetes软件包管理器--Helm发布了最新版本Helm 3,并且该版本已经stable.Helm 3中的一些关键特性我们在之前的文章中已经介绍过,其中一些功能吸引了许多开发人员.那么,现在你大概想知道升级/迁移到新版本的Helm是否麻烦.尽管Helm可能十分复杂,但是请不要担心,升级过程极为简单.Helm官方blog提供了有关迁移过程的指南,十分详细,欢迎查阅: https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/ 这

#IT明星不是梦#利用Python进行网站日志分析

网站的访问日志是一个非常重要的文件,通过分析访问日志,能够挖掘出很多有价值的信息.本文介绍如何利用Python对一个真实网站的访问日志进行分析,文中将综合运用Python文件操作.字符串处理.列表.集合.字典等相关知识点.本文所用的访问日志access_log来自我个人的云服务器,大家可以从文末的附件中下载. 1.提取指定日期的日志 下面是一条典型的网站访问日志,客户端访问网站中的每个资源都会产生一条日志. 193.112.9.107 - - [25/Jan/2020:06:32:58 +080

#IT明星不是梦# 疫情下DevOps团队远程办公的一天

一 背景 20200202多么神奇的一个数字,响应国家号召,作为一个普通公民面对恶魔疾病疯狂摧残同胞的身心,我们自身能做的就是做好宅男宅女,蜗居室内减少外出,切断病毒传播途径,自觉隔离不为社会添乱. 在昨天公司已经开始了远程在家办公模式,自己很庆幸从事云计算及相关服务的行业,我们为数亿万计的企业提供IT服务,这次疾病对我们的办公相较于传统旅游/餐饮/手工制造业等造成的影响相对较少.但长远来说,无论是技术的进化,还是伴随公司组织的扩张,抑或外部突发性事件的影响,跨地域远程的组织协作必然是未来的趋势

#IT明星不是梦# 自动化平台的构建与zabbix二次开发那些事

在前东家,我对于运维平台重新做了二次的改造,当然基于zabbix平台的功能也在不断的完善,相对于之前的基础架构,我们这次采用vue + element的前端架构,出图使用的是echart的方式.后端我们使用了restful的标准通信框架. 自动化架构 1.当然在讲到zabbix之前我们先看一下我们之前在老东家的时候做的相关的一些平台操作: 平台相关注解: 底层的数据主要使用CMDB来进行管理,CMDB开放APi接口给上层的发布系统.DB系统:当然各个子系统对接都是有权限审计. 数据录入统一使用脚

#IT明星不是梦# 如何在微信中发布动态信息

1.内容简介 本文介绍一种信息发布方案,可将您的数据发布到微信,可在后端随时更新数据,能做到数据更新的前后端联动,从而让信息发布更方便.更高效. 2.什么是动态信息 在企业营销及服务活动中,有很多信息需要发布与推广.微信不仅传播速度快,而且范围广,是很好的宣传载体.但普通的微信发文有个缺点,文章一旦发表就定稿了,无法修改更新,因此只适合静态信息的发布,如:新闻报道.科普知识.人物事迹等. 现实生活中,很多信息是动态的,是经常变化的.比如,商家的促销清单,其内容不是固定的,随时都可能要调整:影剧院

#IT明星不是梦#图解kubernetes容器探活机制核心实现

在k8s中通过kubelet拉起一个容器之后,用户可以指定探活的方式用于实现容器的健康性检查,目前支持TCP.Http和命令三种方式,今天介绍其整个探活模块的实现, 了解其周期性探测.计数器.延迟等设计的具体实现 1. 探活的整体设计 1.1 线程模型 探活的线程模型设计相对简单一些,其通过worker来进行底层探活任务的执行,并通过Manager来负责worker的管理, 同时缓存探活的结果 1.2 周期性探活 根据每个探活任务的周期,来生成定时器,则只需要监听定时器事件即可 1.3 探活机制