Hive基础部分
Hive的体系架构常见的三个面试问题Hive 建表高阶语句 CTAS and CTE分区(partition):分桶(Buckets) Hive进阶部分
什么是数据仓库Hive的视图hive mapjoin学习回顾
Hive基础部分 Hive的体系架构
用户接口主要有三个:CLI(command line interface)命令行,JDBC 和 Web UI, CLI是开发过程中常用的接口,在hive Server2提供新的命令beeline,使用sqlline语法,会有单独的章节来介绍。
metaStore: hive的元数据结构描述信息库,可选用不同的关系型数据库来存储,通过配置文件修改、查看数据库配置信息。
Driver: 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行 。
常见的三个面试问题- 什么是内部表和外部表?90%它们之间的主要区别是什么?80%使用它们的最佳实践是什么?20% (最佳实践)
- CTAS–按选择创建表格
基于select查询的结果生成表不能生成分区表,外部表,桶表像其他表格一样创建表格(fast)
复制表的结构,不携带数据
- 为了提高性能,Hive可对数据进行分区
分区列的值将表分成段
查询时可以忽略整个分区必须由用户正确创建分区。 插入数据时必须指定分区在查询中使用时,“分区”列和常规列之间没有区别在查询时,Hive将自动过滤掉未使用的分区以获得更好的性能
- bucket对应于HDFS中的文件段随机抽样数据或加速JOIN的速度根据“bucket列”的哈希函数将数据分成一组Hive不会自动执行分桶。 需要设置强制分桶
SET hive.enforce.bucketing = true;存储桶列的选择密切依赖于业务逻辑要定义桶的数
量,我们应该避免每个桶中的数据太多或太少。 在靠近两个数据块的地方更好的选择。 使用2N作为桶的数量.
- 数据仓库解决方案构建在hadoop之上提供类似SQL的查询语言Hive Query Language-HQL,它具有最小的学习曲线
强调文本 强调文本
- View是一种逻辑结构,通过隐藏虚拟表中的子查询,连接和函数来简化查询Hive视图不存储数据不能物化创建视图后,立即冻结其架构如果删除或更改基础表,则查询视图将失败视图是只读的,不能用作LOAD/INSERT/ALTER的目标
- MAPJOIN语句意味着只通过map执行连接,没有reduce job
MapReduce编程可以只有map阶段而没有reduce阶段.MapJoin会读取小表中所有的数据到内存,然后广播到所有的运行map任务的节点。
类似于MapReduce DC,也就是Distributed Catch,分布式缓存设置 hive.auto.convert.join=true后,Hive会在运行时自动将JOIN转换为MAPJOIN
有没有弊端呢?有弊端的,有时候会造成内存溢出
4.不支持如下操作
Use MAPJOIN after UNIOn ALL, LATERAL VIEW, GROUP BY/JOIN/SORT BY/CLUSTER BY/DISTRIBUTE BY
Use MAPJOIN before by UNIOn, JOIN and other MAPJOIN
5.底层就是基于Mapreduce的DC(分布式缓存)来实现的。
- hive的分区和分桶的概念动态分区和静态分区的比较hive进阶中的语法的掌握hive的视图以及窗口案例的实践



