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) 不同数据类型关联产生数据倾斜
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) 不同数据类型关联产生数据倾斜
相关文章推荐
- STL学习小结
- PCI9054 学习小结
- Activiti 学习笔记 小结
- hadoop生态系统学习之路(八)hbase与hive的数据同步以及hive与impala的数据同步
- unicode学习小结
- 20131208学习小结
- iBatis学习小结
- hive入门学习线路指导
- c primer plus 第十一章学习小结
- (2011.11.03)汇编_王爽_第12章_学习小结
- 黑马程序员 【】java学习之路——代理小结
- 学习笔记4:java中Thread类的方法小结
- Hive 学习笔记(启动方式,内置服务)
- siebel学习初涉小结
- oracle 学习小结9
- 一些工作学习技术小结
- Linux 学习初级命令小结
- express学习小结
- 《Computer Networks (fifth edition)》第六章学习小结