1、Query

(1)分区查询

在查询的过程中,采用那个分区来查询是通过系统自动的决定,但是必须是在分区列上基于where子查询。

SELECT page_views.*

FROM page_views
WHERE page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31' AND
      page_views.referrer_url like '%xyz.com';

(2)、join 从集合的角度上来理解

在mysql中join的查询分为两类:(1)内联结查询 (2)外联结查询;hive当然也是有两种join的查询,并且其join的查询方式跟mysql相当的类似。下面通过案例详细介绍

首先创建两个表,并插入几天记录来作为测试:

create table jn1 (name String);

insert into table jn1 values("java1","java2","blue");

create table jn2 (name String);

insert into table jn2 values("mysql1"),("mysql2"),("blue");

  1)内联结查询 (可以理解为求两个表的交集)

select jn1.*,jn2.* from jn1 JOIN jn2 ON(jn1.name=jn2.name)

所得结果是:

  2)外联结查询

外联结查询与可以分为三种查询方式:1)左外连接, 2)右外连接,3) 全外联结查询

同样采用上面的两个表来进行测试。

  i)左外连接查询 (可以理解成表a以及表a和表b的交集的集合)

   select jn1.* ,jn2.* from jn1 LEFT JOIN jn2 ON(jn1.name=jn2.name);

  或者

   select a.* ,b.* from jn1 a LEFT JOIN jn2 b ON(a.name=b.name);

  

  ii)右外连接查询(可以理解成表b以及表a和表b的交集的集合)

   select jn1.* ,jn2.* from jn1 RIGHT JOIN jn2 ON(jn1.name=jn2.name);

  或者

   select a.* ,b.* from jn1 a RIGHT JOIN jn2 b ON(a.name=b.name);

  

  iii)全外联结查询(表a和表b的并集)

  select jn1.* ,jn2.* from jn1 FULL JOIN jn2 ON(jn1.name=jn2.name);

  或者

  select a.* ,b.* from jn1 a FULL JOIN jn2 b ON(a.name=b.name);

  

2、Group by 的查询

为了统计每一个性别不同用户的总数的查询语句可以是:

SELECT pv_users.gender, count (DISTINCT pv_users.userid) FROM pv_users GROUP BY pv_users.gender;

3、聚合计算

(1)单个聚合情况

SELECT pv_users.gender, count (DISTINCT pv_users.userid) FROM pv_users GROUP BY pv_users.gender;

(2)多个聚合可以同时计算,但是必须要有不同的列名

Multiple aggregations can be done at the same time, however, no two aggregations can have different DISTINCT columns .e.g while the following is possible

  SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(*), sum(DISTINCT pv_users.userid)

  FROM pv_users

   GROUP BY pv_users.gender;

如下面的多个聚合就不行:

SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(DISTINCT pv_users.ip) //这两个查询之后列名重复,所以不允许

FROM pv_users
GROUP BY pv_users.gender;

4、Insert

(1)将数据插入到hive中的表中

FROM pv_users
INSERT OVERWRITE TABLE pv_gender_sum
    SELECT pv_users.gender, count_distinct(pv_users.userid)
    GROUP BY pv_users.gender

(2)将数据插入到hdfs中的文件中

  INSERT OVERWRITE DIRECTORY '/user/data/tmp/pv_age_sum'
    SELECT pv_users.age, count_distinct(pv_users.userid)
    GROUP BY pv_users.age;

(3)动态分区插入

我们可以实现分区插入如下实现。

FROM page_view_stg pvs

INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country='US')
       SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, nullnull, pvs.ip WHERE pvs.country = 'US'
INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country='CA')
       SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, nullnull, pvs.ip WHERE pvs.country = 'CA'
INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country='UK')
       SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, nullnull, pvs.ip WHERE pvs.country = 'UK';

以上实现的分区插入,存在一个问题:当增加某个国家时,那么需要在增加一个insert的语句,这样极其的不方便,为此hive提供了一个动态确定分区的方式来实现动态分区插入,只需要一条语句即可:

FROM page_view_stg pvs

INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country)
       SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, nullnull, pvs.ip, pvs.country

(4)插入数据到本地文件中

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/pv_gender_sum' SELECT pv_gender_sum.* FROM pv_gender_sum;

5、Union (连接)

它的意思是将两次或者多次的查询结果连接起来(但是它没有去重的功能)

select * from jn1 union all select * from jn2;

结果如下:

hive的Query和Insert,Group by,Aggregations(聚合)操作的更多相关文章

  1. [Hive - LanguageManual] DML: Load, Insert, Update, Delete

    LanguageManual DML Hive Data Manipulation Language Hive Data Manipulation Language Loading files int ...

  2. hive的高级查询(group by、 order by、 join 、 distribute by、sort by、 clusrer by、 union all等)

    查询操作 group by. order by. join . distribute by. sort by. clusrer by. union all 底层的实现 mapreduce 常见的聚合操 ...

  3. REP-20147 Cannot implement column link for this detail SQL query. Converting to group link.

    注:本文为原创,作为学习交流使用,转载请标明作者及出处,作者保留追究法律责任的权力. Lumen Su lzsu1989#gmail.com (#=@) www.cnblogs.com/lzsu198 ...

  4. Hive 基本语法操练(一):表操作

    Hive 和 Mysql 的表操作语句类似,如果熟悉 Mysql,学习Hive 的表操作就非常容易了,下面对 Hive 的表操作进行深入讲解. **(1)先来创建一个表名为student的内部表** ...

  5. elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg

    分析 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中的GROUP BY但是功能更强大. 举个例子,让我们找到所有职员中最大 ...

  6. mongdb group聚合操作

    1.数据准备 [{"goods_id":1,"cat_id":4,"goods_name":"KD876"," ...

  7. hive常用函数 wordCount--Hive窗口函数1.1.1 聚合开窗函数聚合开窗函数实战

    第三天笔记 第三天笔记 SQL练习Hive 常用函数关系运算数值计算条件函数日期函数重点!!!字符串函数Hive 中的wordCount1.1 Hive窗口函数1.1.1 聚合开窗函数聚合开窗函数实战 ...

  8. Mybatis之执行insert、update和delete操作时自动提交

    单独使用Mybaits,而没有集成Spring的话,执行insert.update和delete操作是不会自动提交的,即执行语句后不会在数据库有对应的数据变化. 解决这样的方法就是打开自动提交开关,在 ...

  9. 关于GROUP BY和聚合函数

    可以这样去理解group by和聚合函数 转自 http://www.cnblogs.com/wiseblog/articles/4475936.html 写在前面的话:用了好久group by,今天 ...

随机推荐

  1. Python—装饰器

    装饰器 1.普通函数 #简单的函数和调用 def a1(): print("i am zhangsan") def a2(): print("i am lisi" ...

  2. [windows][C++][库]遍历删除文件夹

    #include"windows.h"#include"string.h" BOOL IsDirectory(const char *pDir) { ]; Ze ...

  3. linux下安装及配置和启动memcached

    一.下载文件: 下载memcached和libevent,放到/hom/zwl/目录下 # wget http://www.danga.com/memcached/dist/memcached-1.2 ...

  4. Web网页的了解内容

    一.因特网(互联网) 1.发展阶段: A 实验科研阶段 B社会化应用启动阶段 C社会化应用阶段 2.基本特征:资源共享 二.万维网 1.全称全球信息网(World Wide web),简称Web 2. ...

  5. Android中Bitmap和Drawable

    一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...

  6. EntityFramework Core 学习笔记 —— 创建模型

    原文地址:https://docs.efproject.net/en/latest/modeling/index.html 前言: EntityFramework 使用一系列的约定来从我们的实体类细节 ...

  7. URLClassLoader类

    URLClassLoader类 1.URLClassLoader类也是ClassLoader类的实现类,它的功能非常强大,他可以从本地文件系统中获取二进制文本来加载类,也可以从远程主机获取二进制文件来 ...

  8. oracle组查询

    概念: 所谓组查询即将数据按照某列或者某些列相同的值进行分组,然后对该组的数据进行组函数运用,针对每一组返回一个结果. note: 1.组函数可以出现的位置: select子句和having 子句 2 ...

  9. python: 模块发布

    一.准备发布 1.为模块文件创建一个文件夹,并将模块文件复制到这个文件中(一般,文件夹的名字和模块的名字一样) 2.在文件夹中创建一个名为『setup.py』的文件,内容如下: #encoding:u ...

  10. SPI总线(同步)

    一.SPI总线简介 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口.SPI 用 于CPU与各种外围器件进行全双工. ...