Hive杂项

Posted on 2021-03-13 19:26  SinkingInBigData  阅读(37)  评论(0)    收藏  举报

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