知识点:
Hive是数据仓库建模工具之一。
传统的关系数据库具有结构化程度高、独立性强、冗余度低,主要是操作型数据库和分析型数据库。
其中操作型数据库:主要用于业务支撑。一个公司往往会使用并维护若干个操作型数据库,这些数据库保存着公司的日常操作数据,比如商品购买、酒店预订、学生成绩录入等。
分析型数据库:主要用于历史数据分析。这类数据库作为公司的单独数据存储,负责利用历史数据对公司各主题域进行统计分析。
差别:数据组成差别 - 数据时间范围差别,数据组成差别 - 数据细节层次差别,数据组成差别 - 数据时间表示差别,技术差别 - 查询数据总量和查询频度差别,技术差别 - 数据更新差别,技术差别 - 数据冗余差别,功能差别 - 数据读者差别,功能差别 - 数据定位差别。
数据仓库就是为了解决数据库不能解决的问题而提出的。那么数据库无法解决什么样的问题呢?这个我们得先说说什么是OLAP和OLTP。
OLTP即对数据库的增删改查,速度快,数据内容不会特别大,事务的精准性特别高。
OLAP即对事务处理时对其要从多个维度进行分析,传统的数据库无法满足。
比尔 恩门对数据仓库的定义为数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理中的决策制定。
数据仓库的特点:面向主题、集成性、企业范围、历史性、时变性。
Hive实现map-reduce任务:
Hive特点:1、可扩展性 2、延申性 3、容错
hive和传统数据库对比:
hive架构:
分区的目的:使查询范围变小,避免了全表扫描,加快了查询速率。
静态分区需要注意将相应的分区字段分批次导入。
静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列是在编译时期通过用户传递来决定的;动态分区只有在SQL执行时才能决定。
数据分桶原理:Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
分桶优势:方便抽样,提高join查询效率
分桶表和分区表插入数据有所区别,分区表需要select 和指定分区,而分桶则不需要
hive语句的执行顺序:
1.from
2.join on 或 lateral view explode(需炸裂的列) tbl as 炸裂后的列名
3.where
4.group by
5.聚合函数 如Sum() avg() count(1)等
6.having 在此开始可以使用select中的别名
7.select 若包含over()开窗函数,此时select中的内容作为窗口函数的输入,窗口中所选的数据范围也是在group by,having之后,并不是针对where后的数据进行开窗,这点要注意。需要注意开窗函数的执行顺序及时间点。
8.distinct
9.order by
10.limit
面试题:
什么是hive?
答:1:hive是基于hadoop的数据仓库建模工具之一(后面还有TEZ,Spark)。
2:hive可以使用类sql方言,对存储在hdfs上的数据进行分析和管理。传入一条交互式sql在海量数据中查询分析结果的工具。
sql语句是如何转化成MR任务的?
元数据存储在数据库中,默认存在自带的derby数据库(单用户局限性)中,推荐使用Mysql进行存储。
1) 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完 成,比如ANTLR;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
2) 编译器(Physical Plan):将AST编译生成逻辑执行计划。
3) 优化器(Query Optimizer):对逻辑执行计划进行优化。
4) 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是 MR/Spark。
内部表和外部表的区别?如何创建外部表?工作中使用外部表
删除表的时候,表对应的文件夹会被删除,同时数据也会被删除,默认建表的类型就是内部表。
外部表因为是指定其他的hdfs路径的数据加载到表中来,所以hive会认为自己不完全独占这份数据,删除hive表的时候,数据仍然保存在hdfs中,不会删除。
创建外部表是需要在table前加上关键字external。