Hive数仓之快速入门(二)

来源:互联网 发布:lufylegend.js 编辑:程序博客网 时间:2024/06/04 17:51

上次已经讲了《Hive数据仓库之快速入门一》不记得的小伙伴可以点击回顾一下,接下来我们再讲Hive数据仓库之快速入门二


DQL

hive中的order by、distribute bysort bycluster by
 
order by
 
全局排序,只有一个Reduce任务
 
sort by 
只做jubu排序
 
distribute by 
用distribute by 会对指定的字段按照hashCode值对reduce的个数取模,然后将任务分配到对应的reduce中去执行
 
cluster by 
distribute by 和 sort by 合用就相当于cluster by,但是cluster by 不能指定排序为asc或desc 的规则,只能是desc倒序排列
 
注:distribute by 和 sort by,distribute by 必须在sort by前面
表连接
1.join只支持等值连接
 
2.可以 join 多于 2 个表
SELECT a.val, b.val, c.val FROM aJOIN b
    ON (a.key = b.key1) JOIN c ON (c.key = b.key2)
注:如果join中多个表的 join key 是同一个,则 join 会被转化为单个map/reduce 任务
 
3.LEFTRIGHTFULL OUTER
SELECT
 a.val, b.val FROM a LEFT OUTER JOIN bON (a.key=b.key)
 
如果 d 表中找不到对应 c 表的记录,d 表的所有列都会列出 NULL,包括 ds 列。也就是说,join 会过滤d 表中不能找到匹配 c 表 join key 的所有记录。这样的话,LEFT OUTER 就使得查询结果与WHERE 子句无关
 
•解决办法
  SELECT c.val, d.val FROM c LEFT OUTER JOIN d 
     ON
 (c.key=d.key AND d.ds='2009-07-07' AND c.ds='2009-07-07')
     
4.LEFT SEMI JOIN
LEFT
 SEMI JOIN 的限制是, JOIN 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行
 
SELECT a.key, a.value 
  FROM
 a
  WHERE a.key in 
   (SELECT b.key 
    FROM
 B);
 
可以被重写为:
 
SELECT a.key, a.val
   FROM a LEFT SEMI JOIN b on (a.key = b.key)
   
5.UNION ALL
用来合并多个select的查询结果,需要保证select中字段须一致
  select_statement UNION ALL select_statement UNION ALL select_statement ...
分析窗口函数
over (partition by * order by d desc)
其他
1.不支持EXIST ,NOT EXIST
 
2.Top N 关键字 为Limit
 
3.支持正则筛选字段,如SELECT `(ds|hr)?+.+` FROM test

DCL

权限
Grant/revoke语法:
grant/revoke priv_type[column_list] on object_typeobject to/from principal_type principal_name
 
查看grant 定义:
show grant user user_name on table table_name;
 
 
创建/删除角色:
Create/drop Role role_name
 
角色分配/回收:
Grant role role_name to user user_name
Revoke role role_name from user user_name
 
角色授权:
Grant/revoke priv_type[col_List] on object_typeobject from/to role role_name
 
查看role定义:
show role grant role role_name
 
相关hive元信息表:
Db_privs:记录了User/Role在DB上的权限
Tbl_privs:记录了User/Roletable上的权限
Tbl_col_privs:记录了User/Roletable column上的权限
Roles:记录了全部创建的role
Role_map:记录了UserRole的相应关系

Hive函数

UDF、UDAF和UDTF
UDF实现输入一行输出一行行的函数
UDAF实现输入多行输出一行的函数
UDTF实现输入一行输出多行的函数
自定义UDF、UDAF和UDTF

相关资料

hive2.0函数大全 http://www.cnblogs.com/MOBIN/p/5618747.html

Mysql数据导入Hive

通过sqoop把mysql数据导入到hive(若hive没对应表则自动建表)
./bin/sqoop import --connect jdbc:mysql://172.17.4.1:3306/poi --username lizt  --table poi_amap --hive-import --password 123456

python 客户端

pyhs2
pip install pyhs2
原创粉丝点击