百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

数仓/数开面试题真题总结(二)(数仓开发工程师)

toyiye 2024-09-12 20:49 5 浏览 0 评论

二.Hive

1.大表join小表产生的问题,怎么解决?

2.udf udaf udtf区别

3.hive有哪些保存元数据的方式,各有什么特点。

4.hive内部表和外部表的区别

5.生产环境中为什么建议使用外部表?

6.insert into 和 override write区别?

7.hive的判断函数有哪些

8.简单描述一下HIVE的功能?用hive创建表几种方式?hive表有几种?

9.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因

10.若在hive中建立分区仍不能优化查询效率,建表时如何优化

11.union all和union的区别

12.如何解决hive数据倾斜的问题

13.hive性能优化常用的方法

14.简述delete,drop,truncate的区别

15.order by , sort by , distribute by , cluster by的区别

16.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?

17.分区分桶的区别,为什么要分区

18.mapjoin的原理

19.在hive的row_number中distribute by 和 partition by的区别

20.hive开发中遇到什么问题?

21.什么时候使用内部表,什么时候使用外部表

22.hive都有哪些函数,你平常工作中用到哪些

23.手写sql,连续活跃用户

24.left semi join和left join区别

25.group by为什么要排序

26.说说印象最深的一次优化场景,hive常见的优化思路

27.聊聊hive的执行引擎,spark和mr的区别?

28.hive的join底层mr是如何实现的?

29.sql问题,连续几天活跃的用户?

30.建好了外部表,用什么语句把数据文件加载到表里

31.Hive的执行流程?

32.hive的元数据信息存储在哪?

33.sql语句的执行顺序from-where-group by-having -select-order by -limit

34.on和where的区别

35.hive和传统数据库之间的区别

36.hive中导入数据的4种方式

二.Hive


1.大表join小表产生的问题,怎么解决?

mapjoin方案

join因为空值导致长尾(key为空值是用随机值代替)

join因为热点值导致长尾,也可以将热点数据和非热点数据分开处理,最后合并


2.udf udaf udtf区别

UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。

UDAF 接受多个输入数据行,并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数。

UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出。lateral view explore()

简单来说:

UDF:返回对应值,一对一

UDAF:返回聚类值,多对一

UDTF:返回拆分值,一对多


3.hive有哪些保存元数据的方式,个有什么特点。

  • 内存数据库derby,安装小,但是数据存在内存,不稳定
  • mysql数据库,数据存储模式可以自己设置,持久化好,查看方便。


4.hive内部表和外部表的区别

Hive内部表外部表区别及各自使用场景


5.生产环境中为什么建议使用外部表?

Hive内部表外部表区别及各自使用场景


6.insert into 和 override write区别?

insert into:将数据写到表中

override write:覆盖之前的内容。


7.hive的判断函数有哪些

hive 的条件判断(if、coalesce、case)


8.简单描述一下HIVE的功能?用hive创建表有几种方式?hive表有几种?

hive主要是做离线分析的

hive建表有三种方式

  • 直接建表法
  • 查询建表法(通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据一般用于中间表)
  • like建表法(会创建结构完全相同的表,但是没有数据)

hive表有2种:内部表和外部表


9.线上业务每天产生的业务日志(压缩后>=3G),每天需要加载到hive的log表中,将每天产生的业务日志在压缩之后load到hive的log表时,最好使用的压缩算法是哪个,并说明其原因


10.若在hive中建立分区仍不能优化查询效率,建表时如何优化


11.union all和union的区别

union 去重

union oll 不去重


12.如何解决hive数据倾斜的问题

Hive调优,数据工程师成神之路


13.hive性能优化常用的方法

Hive调优,数据工程师成神之路

14.简述delete,drop,truncate的区别

delet 删除数据

drop 删除表

truncate 摧毁表结构并重建


15.order by , sort by , distribute by , cluster by的区别

1、 order by可以指定desc降序asc升序


order by会对输入做全局排序,因此只有一个 reducer(多个 reducer无法保证全局有序),然而只有一个 Reducer,会导致当输入规模较大时,消耗较长的计算时间。


2、 sort by不是全局排序,其在数据进入 reducer前完成排序,因此,如果用 sort by进行排序并且设置 mapped. reduce. tasks〉1,则 sort by只会保证每个 reducer的输出有序,并不保证全局有序。(全排序实现:先用 sortby保证每个 reducer输出有序,然后再进行 order by归并下前面所有的 reducer输出进行单个 reducer排序,实现全局有序。)


3、 distribute by(重要)


distribute by是控制在map端如何拆分数据给 reduce端的。hive会根据 distribute by后面列,对应 reduce的个数进行分发,默认是采用hash算法。sort by为每个 reduce产生一个排序文件。在有些情况下,你需要控制某个特定行应该到哪个 reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此, distribute by经常和 sort by配合使用。


4、 cluster by


cluster by具有 distribute by和 sort by的组合功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC


如何实现组内排序或者组内TopN?语法格式


row number(0)OVER( partition by COLI order by CL2desc)rank先对COL1列进行分区,再对COL2列进行排序。组内排序


16.Hive 里边字段的分隔符用的什么?为什么用\t?有遇到过字段里 边有\t 的情况吗,怎么处理的?为什么不用 Hive 默认的分隔符,默认的分隔符是什么?

hive 默认的字段分隔符为 ascii 码的控制符\001(^A),建表的时候用 fields terminated by '\001'

遇到过字段里边有\t 的情况,自定义 InputFormat,替换为其他分隔符再做后续处理


17.分区分桶的区别,为什么要分区

分区表:原来的一个大表存储的时候分成不同的数据目录进行存储。如果说是单分区表,那么在表的目录下就只有一级子目录,如果说是多分区表,那么在表的目录下有多少分区就有多少级子目录。不管是单分区表,还是多分区表,在表的目录下,和非最终分区目录下是不能直接存储数据文件的

分桶表:原理和hashpartitioner 一样,将hive中的一张表的数据进行归纳分类的时候,归纳分类规则就是hashpartitioner。(需要指定分桶字段,指定分成多少桶)

分区表和分桶的区别除了存储的格式不同外,最主要的是作用:

  • 分区表:细化数据管理,缩小mapreduce程序 需要扫描的数据量
  • 分桶表:提高join查询的效率,在一份数据会被经常用来做连接查询的时候建立分桶,分桶字段就是连接字段;提高采样的效率

有了分区为什么还要分桶?

(1)获得更高的查询处理效率。同为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。

(2)使取样( sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

分桶是相对分区进行更细粒度的划分。分桶将表或者分区的某列值进行hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。

与分区不同的是,分区依据的不是真实数据表文件中的列,而是我们指定的伪列,但是分桶是依据数据表中真实的列而不是伪列


18.mapjoin的原理

MapJoin通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为25000000字节,即25M。
Hive0.7之前,需要使用hint提示 /*+ mapjoin(table) */才会执行MapJoin,否则执行Common Join,但在0.7版本之后,默认自动会转换Map Join,由参数hive.auto.convert.join来控制,默认为true.
假设a表为一张大表,b为小表,并且hive.auto.convert.join=true,那么Hive在执行时候会自动转化为MapJoin。

MapJoin简单说就是在Map阶段将小表读入内存,顺序扫描大表完成Join。减少昂贵的shuffle操作及reduce操作
MapJoin分为两个阶段:

通过MapReduce Local Task,将小表读入内存,生成HashTableFiles上传至Distributed Cache中,这里会HashTableFiles进行压缩。

MapReduce Job在Map阶段,每个Mapper从Distributed Cache读取HashTableFiles到内存中,顺序扫描大表,在Map阶段直接进行Join,将数据传递给下一个MapReduce任务。


19.在hive的row_number中distribute by 和 partition by的区别


20.hive开发中遇到什么问题?


21.什么时候使用内部表,什么时候使用外部表

Hive内部表外部表区别及各自使用场景


22.hive都有哪些函数,你平常工作中用到哪些

  • 数学函数

round(DOUBLE a)

floor(DOUBLE a)

ceil(DOUBLE a)

rand()

  • 集合函数

size(Map<K.V>)

map_keys(Map<K.V>)

map_values(Map<K.V>)

array_contains(Array<T>, value)

sort_array(Array<T>)

  • 类型转换函数

cast(expr as <type>)

  • 日期函数

date_format函数(根据格式整理日期)
date_add、date_sub函数(加减日期)
next_day函数
last_day函数(求当月最后一天日期)
collect_set函数
get_json_object解析json函数

from_unixtime(bigint unixtime, string format)
to_date(string timestamp)
year(string date)
month(string date)
hour(string date)
weekofyear(string date)
datediff(string enddate, string startdate)
add_months(string start_date, int num_months)
date_format(date/timestamp/string ts, string fmt)

  • 条件函数

if(boolean testCondition, T valueTrue, T valueFalseOrNull)

nvl(T value, T default_value)

COALESCE(T v1, T v2, ...)

CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END

isnull( a )

isnotnull ( a )

  • 字符函数

concat(string|binary A, string|binary B...)

concat_ws(string SEP, string A, string B...)

get_json_object(string json_string, string path)

length(string A)

lower(string A) lcase(string A)

parse_url(string urlString, string partToExtract [, string keyToExtract])

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)

reverse(string A)

split(string str, string pat)

substr(string|binary A, int start) substring(string|binary A, int start)

  • 聚合函数

count sum min max avg

  • 表生成函数

explode(array<TYPE> a)

explode(ARRAY)

json_tuple(jsonStr, k1, k2, ...)

parse_url_tuple(url, p1, p2, ...)


23.手写sql,连续活跃用户

大厂高频面试题-连续登录问题


24.left semi join和left join区别

left semi join和left join区别


25.group by为什么要排序


26.说说印象最深的一次优化场景,hive常见的优化思路

Hive调优,数据工程师成神之路


27.聊聊hive的执行引擎,spark和mr的区别?


28.hive的join底层mr是如何实现的?


29.sql问题,连续几天活跃的用户?

大厂高频面试题-连续登录问题


30.建好了外部表,用什么语句把数据文件加载到表里


31.Hive的执行流程?


32.hive的元数据信息存储在哪?


33.sql语句的执行顺序from-where-group by-having -select-order by -limit


34.on和where的区别

left join(on&where)


35.hive和传统数据库之间的区别

1、写时模式和读时模式

传统数据库是写时模式,在load过程中,提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费更多的加载时间。

Hive是读时模式,1 oad data非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。

2、数据格式。Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:列分隔符,行分隔符,以及读取文件数据的方法。数据库中,存储引擎定义了自己的数据格式。所有数据都会按照一定的组织存储

3、数据更新。Hive的内容是读多写少的,因此,不支持对数据的改写和删除,数据都在加载的时候是确定好的。数据库中的数据通常是需要经常进行修改

4、执行延迟。Hive在查询数据的时候,需要扫描整个表(或分区),因此延迟较高,只有在处理大数据是才有优势。数据库在处理小数据是执行延迟较低。

5、索引。Hive比较弱,不适合实时查询。数据库有。

6、执行。Hive是 Mapreduce,数据库是 Executor

7、可扩展性。Hive高,数据库低

8、数据规模。Hive大,数据库小


36.hive中导入数据的4种方式

  • 从本地导入:load data local inpath /home/liuzc into table ods.test
  • 从hdfs导入:load data inpath /user/hive/warehouse/a.txt into ods.test
  • 查询导入:create table tmp_test as select * from ods.test
  • 查询结果导入:insert into table tmp.test select * from ods.test



相关推荐

如何用 coco 数据集训练 Detectron2 模型?

随着最新的Pythorc1.3版本的发布,下一代完全重写了它以前的目标检测框架,新的目标检测框架被称为Detectron2。本教程将通过使用自定义coco数据集训练实例分割模型,帮助你开始使...

CICD联动阿里云容器服务Kubernetes实践之Bamboo篇

本文档以构建一个Java软件项目并部署到阿里云容器服务的Kubernetes集群为例说明如何使用Bamboo在阿里云Kubernetes服务上运行RemoteAgents并在agents上...

Open3D-ML点云语义分割实验【RandLA-Net】

作为点云Open3D-ML实验的一部分,我撰写了文章解释如何使用Tensorflow和PyTorch支持安装此库。为了测试安装,我解释了如何运行一个简单的Python脚本来可视化名为...

清理系统不用第三方工具(系统自带清理软件效果好不?)

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

【信创】联想开先终端开机不显示grub界面的修改方法

原文链接:【信创】联想开先终端开机不显示grub界面的修改方法...

如意玲珑成熟度再提升,三大发行版支持教程来啦!

前期,我们已分别发布如意玲珑在deepinV23与UOSV20、openEuler24.03发行版的操作指南,本文,我们将为大家详细介绍Ubuntu24.04、Debian12、op...

118种常见的多媒体文件格式(英文简写)

MP4[?mpi?f??]-MPEG-4Part14(MPEG-4第14部分)AVI[e?vi??a?]-AudioVideoInterleave(音视频交错)MOV[m...

密码丢了急上火?码住7种console密码紧急恢复方式!

身为攻城狮的你,...

CSGO丨CS2的cfg指令代码分享(csgo自己的cfg在哪里?config文件位置在哪?)

?...

使用open SSL生成局域网IP地址证书

某些特殊情况下,用户内网访问多可文档管理系统时需要启用SSL传输加密功能,但只有IP,没有域名和证书。这种情况下多可提供了一种免费可行的方式,通过openSSL生成免费证书。此方法生成证书浏览器会提示...

Python中加载配置文件(python怎么加载程序包)

我们在做开发的时候经常要使用配置文件,那么配置文件的加载就需要我们提前考虑,再不使用任何框架的情况下,我们通常会有两种解决办法:完整加载将所有配置信息一次性写入单一配置文件.部分加载将常用配置信息写...

python开发项目,不得不了解的.cfg配置文件

安装软件时,经常会见到后缀为.cfg、.ini的文件,一般我们不用管,只要不删就行。因为这些是程序安装、运行时需要用到的配置文件。但对开发者来说,这种文件是怎么回事就必须搞清了。本文从.cfg文件的创...

瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法

本文适用OpenHarmony开源鸿蒙系统,本次使用的是开源鸿蒙主板,搭载瑞芯微RK3568芯片。深圳触觉智能专注研发生产OpenHarmony开源鸿蒙硬件,包括核心板、开发板、嵌入式主板,工控整机等...

Python9:图像风格迁移-使用阿里的接口

先不多说,直接上结果图。#!/usr/bin/envpython#coding=utf-8importosfromaliyunsdkcore.clientimportAcsClient...

Python带你打造个性化的图片文字识别

我们的目标:从CSV文件读取用户的文件信息,并将文件名称修改为姓名格式的中文名称,进行规范资料整理,从而实现快速对多个文件进行重命名。最终效果:将原来无规律的文件名重命名为以姓名为名称的文件。技术点:...

取消回复欢迎 发表评论:

请填写验证码