hive join

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

  • 语法

    join_table:
     table_reference [INNER] JOIN table_factor [join_condition]
     table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition
     table_reference LEFT SEMI JOIN table_reference join_condition
     table_reference CROSS JOIN table_reference [join_condition] (as of Hive ``0.10``)
  1. Hive 0.13.0之后可以使用隐式join,即:SELECT * FROM table1 t1, table2 t2 WHERE t1.id = t2.id,默认为inner join

  2. 多个表join时,如果用作连接的列为同一列,则最终只会转化为一个map-reduce作业

  3. 多个表join时,除了最后一个join的表之外的表会缓存到buffer中,所以,将数据量最大的表放在最后可以有效减少内存的使用量

  4. 对于表的筛选条件,有两种写法

    1. select * from a left join b on a.id=b.a_id where a.id=**
    2. select * from a left join b on a.id=b.a_id and a.id=**

    如果是分区表,则可能出现这种情况:

    存在a中的id在b表中找不到对应的a_id,left join仍会将数据查询出来,那么通过a.id进行筛选则会筛选出b中分区列为空的数据

标签: join、reference、condition、left、id、面试
  • 回复
隐藏