HIVE杂项
所有join类型
1.inner join 不多说 常用
2.left outer join 或 right outer join 不多说 常用
3.full join :以两个表的记录为基准,返回两个表的记录去重之和,关联不上的字段为NULL
4.left semi join: (左半连接)是 IN/EXISTS 子查询的一种更高效的实现。
i.示例:
select * from tab1 left semi join tab2 on tab1.id=tab2.id
=
select * from tab1 where tab.1id in (select id from tab2)
ii.与其他连接方式不同 left join只会显示主表的字段,不能显示右表的字段,当右表有多个相同key时也不 会进行重复连接。
iii.left semi join 的on约束可以出现左表和右表的字段,但where约束只能出现左表的字段
5.cross join 笛卡尔积连接
i.示例:
select * from tab1 cross join tab2
join on 筛选与where筛选区别
1:inner join :无区别
2.left join 主表的on不会生效,非主表用null补充
3.full join:无区别
元数据
1.元数据是用来描述数据的数据。在hive中的表现就是各种库名表名字段信息,存储在mysql中。
2.hive中的数据是存储在hdfs中的,适合多次读出一次写入,但不适合更新。而元数据正有变更频繁的因此元数据不 适合存在hdfs上。
3.将元数据保存在关系型数据库中,大大减少了在查询过程中执行语义检查的时间
内部表和外部表
1.内部表:
i.默认建立
ii.建表的时候可以指定location, load数据的时候会将数据移动到location中
iii.删除表的时候会将表的元数据和数据(location中的)一起删除。
2.外部表:
i.需要加external关键词
ii.建表的时候如果指定了location,load数据的时候可以将hdfs的数据链接到location中,不需要进行load。
(如果数据已经在hdfs存在的话)
iii.删除表的时候只会删除元数据,location中的数据保留。
HIVE怎么把SQL翻译成mapreduce语句
1.SQL Parser:将Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree。
2.Semantic Analyzer:遍历AST Tree,抽象出查询的基本组成单元QueryBlock
3.Logical plan:遍历QueryBlock,翻译为执行操作树OperatorTree
4.Logical plan optimizer: 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle 数据量;
5.Physical plan:遍历OperatorTree,翻译为MapReduce任务;
6.Logical plan optimizer:物理层优化器进行MapReduce任务的变换,生成最终的执行计划。
AST-Tree -> QueryBlock -> OperatorTree ->优化OperatorTree -> mapreduce ->优化mapreduce
浙公网安备 33010602011771号