Hive面试问题

本文总结了Hadoop面试中关于Hive的常见问题,包括内部表和外部表的区别,以及如何处理数据库导入Hive时遇到的blob或text字段错误。Hive内部表在删除时会一并删除数据,而外部表只删除元数据,提供了一种更安全的数据管理方式。在数据导入时,Hive遵循读时模式,不会在load时验证数据,只在读取时检查数据字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code and KPI, Keep progress,make a better result.
Survive during the day and develop at night。

目录

概 述

hive 分析业务数据:
2、将数据导入到hive中:
sql的设计思路:多表关联:

hive 内部表的问题

3.2.你们数据库怎么导入hive 的,有没有出现问题
在导入hive的时候,如果数据库中有blob或者text字段,会报错,解决方案在sqoop笔记中:
外部表和内部表的区别:
Hive创建内部表时,会将数据移动到数据仓库指向的路径。创建外部表时,仅记录数据所在的路径,不对数据的位置做任何改变,在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
需要注意的是传统数据库对表数据验证是写时模式,而Hive在load时是不检查数据是否符合schema的,Hive遵循的是读时模式,只有在读的时候Hive才检查解析具体的数据字段。

小结

参考资料和推荐阅读

1.链接: 参考资料.

### Hive 常见面试问题及答案 #### 1. 请简单介绍下 Hive 架构? Hive 是一种建立在 Hadoop 上的数据仓库工具,其主要目的是让熟悉 SQL 的用户能够轻松查询存储在 HDFS 中的大规模数据集。Hive 提供了一个类似于 SQL 的查询语言——HiveQL (Hive Query Language),它可以被编译成 MapReduce 或 Tez 等任务来执行[^1]。 #### 2. Hive 表有哪些类型及其区别? Hive 支持多种类型的表,主要包括内部表(Managed Table)、外部表(External Table)、分区表(Partitioned Table)和分桶表(Buckets Table)。 - **内部表**:数据由 Hive 管理,删除表时数据也会随之删除。 - **外部表**:仅存储元数据信息,数据仍然存放在原始位置,删除表不会影响底层数据。 - **分区表**:按某些列进行划分以加速查询速度,适合大规模数据场景。 - **分桶表**:通过对指定列哈希取模实现均匀分布,进一步优化 Join 和采样操作。 #### 3. Hive 创建表有哪些方式? 可以通过 `CREATE TABLE` 语句创建表,支持如下几种形式: - 使用 DDL 定义结构并加载数据; - 从现有表中复制模式或数据; - 导入外部文件作为数据源[^1]。 #### 4. Hive 排序 Order By、Distribute By、Sort By 及 Cluster By 区别? - **Order By**:全局排序,默认会触发 Reduce 阶段,可能导致单点瓶颈。 - **Distribute By**:控制输入数据如何分配给 Reducer,通常用于分组前的操作。 - **Sort By**:针对每个独立的 Reducer 进行局部排序,不保证整体有序性。 - **Cluster By**:如果 Distribute By 和 Sort By 列相同,则可以用 Cluster By 替代两者[^1]。 #### 5. RANK、DENSE_RANK 及 ROW_NUMBER 的区别? 这三种窗口函数都用来为结果集中的每一行分配排名编号,但存在细微差异: - **RANK()**:允许跳跃重复值后的名次; - **DENSE_RANK()**:连续排列即使有相同的值也不会跳号; - **ROW_NUMBER()**:每条记录都会获得唯一标识符,即便数值相等也依次递增。 #### 6. Hive 中你使用过哪些内置函数? Hive 提供丰富的内置函数库,包括但不限于字符串处理函数 (`SUBSTR`, `CONCAT`)、日期时间转换函数 (`FROM_UNIXTIME`, `DATEDIFF`)、聚合统计函数 (`SUM`, `AVG`, `COUNT`) 等[^1]。 #### 7. Hive 中有哪些数据文件格式? 常见的文件格式有 TextFile、SequenceFile、RCFile、ORC、Parquet 等。其中 ORC 和 Parquet 属于列式存储格式,因其高效压缩率与读写性能,在大数据分析领域应用广泛[^2]。 #### 8. UDF、UDAF 及 UDTF 区别?是否有用过自定义函数? - **UDF(User Defined Function)**:单一返回值的标准函数; - **UDAF(User Defined Aggregation Function)**:聚集类运算如求平均数等功能扩展; - **UDTF(User Defined Table Generating Functions)**:将一条输入转化为多条输出记录的功能模块。 确实可以根据业务需求开发专属逻辑封装进以上三者之一加以运用。 --- ### 性能优化相关问题解答 #### 9. 如何通过分区来优化 Hive 查询性能? 合理设计 Partition Key 减少扫描范围至关重要。例如按照日期维度切分日志型海量数据集合可极大降低 I/O 成本从而加快响应速率[^2]。 #### 10. 如何使用桶(Bucket)来优化 Hive 性能? 设定 Bucket 数目依据 key 散列规则预先分割好子集便于后续快速定位目标片段参与计算过程进而达到提速效果[^2]。 #### 11. 什么是 Hive 的 Map Side Join? 如何启用它? 当小表可以全部载入内存时采用 map-side join 方案避免 shuffle 开销显著提升效率。设置参数 `hive.auto.convert.join=true` 自动识别适用情况开启此机制[^2]。 #### 12. 如何通过压缩提高 Hive 的存储和查询性能? 选用 Snappy/Gzip/LZO 等算法对中间产物实施编码缩减体积同时兼顾解码耗时平衡点达成双赢局面。 #### 13. 动态分区插入如何助力效能改进? 批量生成多个目录下的新批次资料免去逐一手工干预环节节省大量人力物力资源投入[^2]. --- ### 工作流与时长计算案例解析 #### 计算工作时长实例 假设需评估审批流程历时长短则可通过以下脚本实现: ```sql SELECT id, SUM(TIMESTAMPDIFF(HOUR, start_time, end_time)) AS total_hours FROM ( SELECT abc AS id, CASE WHEN status='申请' THEN timestamp END AS start_time, LEAD(CASE WHEN status='通过' THEN timestamp END IGNORE NULLS) OVER(PARTITION BY abc ORDER BY timestamp ASC) AS end_time FROM t14 WHERE status IN ('申请','通过') ) subquery GROUP BY id; ``` 这里借助窗口函数 `LEAD()` 获取相邻状态对应时间节点差额累加得出最终结论[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迅捷的软件产品制作专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值