hive

作者: 异想派 | 来源:发表于2016-10-21 14:15 被阅读85次

    分区表

    • 功能:
      辅助查询,缩小查询范围
    • 用法:
      1 . 单分区表建表语句:
      create table day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在id,content,dt三列
      2 . 双分区建表语句:
      create table day_hour_table (id int, content string) partitioned by (dt string, hour string);双分区表,按天和小时分区,在表结构中新增加了dt和hour两列
      3 . 基于分区的查询的语句:
      SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08'
      4 . 查看分区语句:
      show partitions day_hour_table
      心如大海

    查询易错点

    1 . group by不支持别名,order_by 推荐使用别名
    2 . 查询多列时,不能针对某列使用distinct,因为对多列使用distinct,只有完全相同的才会被去重

    select distinct ID,AA,BB from tName
    查找ID+AA+BB列都不重复的

    3 . A表left join B表时,如果on a.user=b.userid,where条件设置b.userid is null,则where条件不能再出现B表字段,否则查询结果为空。
    因为既然要求B表链接为空,则在where子句设置B表其他字段的限制必然是找不到该字段的,可以on增加条件限制
    4 . 多张表关联时

    select count(A.id) from A 
    left join B 
    on A.id=B.id  
    left join C 
    on A.id=C.id
    与
    select count(A.id) from A 
    left join B 
    on A.id=B.id  
    left join C 
    on B.id=C.id
    2者取出来的行数值是不一样的
    

    5 . Join语法概述
    http://www.cnblogs.com/BeginMan/p/3754322.html

    • 5.1
    • INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。
    • LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
    • RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。
    • Cross join:交叉连接,得到的结果是两个表的乘积,即笛卡尔积
    • 5.2 性能优化
    • left join/right join VS inner join
      • 尽量用inner join.避免 LEFT JOIN 和 NULL
      • on与 where的执行顺序,where在匹配完成后才进行过滤
      • 尽量避免子查询,而用join

    6 . 关键字查询时需加上反引号``

    性能优化:

    相关文章

      网友评论

          本文标题:hive

          本文链接:https://www.haomeiwen.com/subject/fstcuttx.html