•如果join中多个表的joinkey是同一个,则join会被转化为单个map/reduce任务LEFT,RIGHT和FULLOUTER•例子•,(=) •如果你想限制join的输出,应该在WHERE子句中写过滤条件——或是在join子句中写••容易混淆的问题是表分区的情况• ,(=) ='2010-07-07'='2010-07-07‘•如果d表中找不到对应c表的记录,d表的所有列都会列出NULL,包括ds列。也就是说,join会过滤d表中不能找到匹配c表joinkey的所有记录。这样的话,LEFTOUTER就使得查询结果与WHERE子句无关•解决办法•, ON(=='2009-07-07'='2009-07-07')LEFTSEMIJOIN•LEFTSEMIJOIN的限制是,JOIN子句中右边的表只能在ON子句中设置过滤条件,在WHERE子句、SELECT子句或其他地方过滤都不行••, FROMa ( FROMB); 可以被重写为: , FROMaLEFTSEMIJOINbon(=)UNIONALL•用来合并多个select的查询结果,需要保证select中字段须一致•select_statementUNIONALLselect_statementUNIONALLselect_statement...第四部分:从SQL到HiveQL应该转变的几个****惯Hive不支持等值连接•SQL中对两表内联可以写成:•select*fromduala,=;•Hive中应为•select*=;
hive 学习笔记5 来自淘豆网www.taodocs.com转载请标明出处.