上次已经讲了《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 a JOIN 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 b ON (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_type object 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_type object 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

Hive数仓之快速入门(二)的更多相关文章

  1. 在HUE中将文本格式的数据导入hive数仓中

    今天有一个需求需要将一份文档形式的hft与fdd的城市关系关系的数据导入到hive数仓中,之前没有在hue中进行这项操作(上家都是通过xshell登录堡垒机直接连服务器进行操作的),特此记录一下. - ...

  2. Hive 数仓中常见的日期转换操作

    (1)Hive 数仓中一些常用的dt与日期的转换操作 下面总结了自己工作中经常用到的一些日期转换,这类日期转换经常用于报表的时间粒度和统计周期的控制中 日期变换: (1)dt转日期 to_date(f ...

  3. 使用Oozie中workflow的定时任务重跑hive数仓表的历史分期调度

    在数仓和BI系统的开发和使用过程中会经常出现需要重跑数仓中某些或一段时间内的分区数据,原因可能是:1.数据统计和计算逻辑/口径调整,2.发现之前的埋点数据收集出现错误或者埋点出现错误,3.业务数据库出 ...

  4. python3.5+django2.0快速入门(二)

    昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...

  5. HDFS+MapReduce+Hive+HBase十分钟快速入门

    1.     前言 本文的目的是让一个从未接触Hadoop的人,在很短的时间内快速上手,掌握编译.安装和简单的使用. 2.     Hadoop家族 截止2009-8-19日,整个Hadoop家族由以 ...

  6. hive数仓客户端界面工具

    1.Hive的官网上介绍了三个可以在Windows中通过JDBC连接HiveServer2的图形界面工具,包括:SQuirrel SQL Client.Oracle SQL Developer以及Db ...

  7. Mysql快速入门(二)

    多表关联查询 JOIN 按照功能大致分为如下三类: CROSS JOIN(交叉连接) INNER JOIN(内连接或等值连接). OUTER JOIN(外连接) 交叉连接 交叉连接的关键字:CROSS ...

  8. HAWQ取代传统数仓实践(十二)——维度表技术之分段维度

    一.分段维度简介 在客户维度中,最具有分析价值的属性就是各种分类,这些属性的变化范围比较大.对某个个体客户来说,可能的分类属性包括:性别.年龄.民族.职业.收入和状态,例如,新客户.活跃客户.不活跃客 ...

  9. Linux Bash Shell快速入门 (二)

    BASH 中的变量介绍BASH 中的变量都是不能含有保留字,不能含有 "-" 等保留字符,也不能含有空格. 简单变量在 BASH 中变量定义是不需要的,没有 "int i ...

随机推荐

  1. 正在执行的sql

    //查询目前系统正在运行的sqlSELECT [Spid]=session_Id, [ecid], [Database]=DB_NAME(sp.dbid), [User] = nt_username, ...

  2. 20175234 2018-2019-2 《Java程序设计》第六周学习总结

    20175234 2018-2019-2 <Java程序设计>第六周学习总结 教材学习内容总结 第七章内部类和异常类 总结 Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内 ...

  3. JavaScript 引用错误

    在学习vue时 出现无法实现效果原始设置 <script src="js/lib/vue2.min.js"/><script src="js/lib/v ...

  4. Python json.dumps 自定义序列化操作

    def login_ajax(request): if request.method == "GET": return render(request, 'login_ajax.ht ...

  5. What is REST API

    What is REST REST is acronym for REpresentational State Transfer. It is architectural style for dist ...

  6. axios封装get方法和post方法

    我们常用的ajax请求方法有get.post.put等方法,相信小伙伴都不会陌生.axios对应的也有很多类似的方法,不清楚的可以看下文档.但是为了简化我们的代码,我们还是要对其进行一个简单的封装.下 ...

  7. redis相关运维命令

    1. 查询redis里面的大key? 在redis实例上执行bgsave,然后我们对dump出来的rdb文件进行分析,找到其中的大KEY 有个不太推荐的命令,debug object xxx 可以看到 ...

  8. k8s的基本使用

    一.kubectl的命令参数 1)kubectl 能使用的命令.即查看帮助 [root@k8s6 ~]# kubectl kubectl controls the Kubernetes cluster ...

  9. C重新入门

    推荐书籍:<C专家编程>.<C和指针>.<C陷阱与缺陷> <C专家编程>参看:http://www.ituring.com.cn/article/274 ...

  10. JS中的同步和异步

    javascript语言是一门“单线程”的语言,不像java语言,类继承Thread再来个thread.start就可以开辟一个线程,所以,javascript就像一条流水线,仅仅是一条流水线而已,要 ...