您的位置:首页 > 其它

hive学习小结

2013-01-01 12:12 453 查看
hive:

1. 存储原理HDFS,低层存储单元mysql等

2. MR计算模型;

3. 常用操作:

  (1) create,alter,show,load,insert; 

  (2) hive 都是等值关联,指定group by,不支持非等值关联;不支持单条insert;不支持update.

  (3) 更新记录需要全表overwrite

  (4) 数据导入与导出。load/insert

  (5) 列查询的正则表达式模式:SELECT `(ds|hr)?+.+` FROM sales

4. hive select

  包括group by ,order by ,sort by ,limit 

5. hive join

(1) 只支持等值连接(才能转换为mr运算),外连接outer joins,和left/right joins

(2) join多表的情况下,注意先后次序及where/on的差异 

(3) join的原理

缓存join序列中除最后一个表的所有表的记录。再通过最后一个表将结果序列化。因此,最大的表应该写在最后。
(4) left,right,full outer 处理join 中空记录

(5) join发生在where 之前

重点注意下面这个的区别:

这里面一个容易混淆的问题是表分区的情况:

  SELECT a.val, b.val FROM a

  LEFT OUTER JOIN b ON (a.key=b.key)

  WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'

会 join a 表到 b 表(OUTER JOIN),列出 a.val 和 b.val 的记录。WHERE 从句中可以使用其他列作为过滤条件。但是,如前所述,如果 b 表中找不到对应 a 表的记录,b 表的所有列都会列出 NULL,包括 ds 列。也就是说,join 会过滤 b 表中不能找到匹配 a 表 join key 的所有记录。这样的话,LEFT OUTER 就使得查询结果与 WHERE 子句无关了。解决的办法是在 OUTER JOIN 时使用以下语法:

  SELECT a.val, b.val FROM a LEFT OUTER JOIN b

  ON (a.key=b.key AND

      b.ds='2009-07-07' AND

      a.ds='2009-07-07')

这一查询的结果是预先在 join 阶段过滤过的,所以不会存在上述问题。这一逻辑也可以应用于 RIGHT 和 FULL 类型的 join 中。

6. hive 常见函数与条件表达式。 基本同mysql

7. hive注意事项

字符集,压缩,count(distinct)---只支持一条查询一个distinct(多个distinct可以使用子查询,内嵌).

8. 不支持的sql:
update,delete,having.


Hive不支持where子句中的子查询

9. hadoop框架问题
数据倾斜:(mr数据分布不均,hash key不均)jobs数多,效率低,初始化MR耗时大。

产生原因:

(1) 空值产生的数据倾斜
(2) 不同数据类型关联产生数据倾斜
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: