hive之高级查询

hive之高级查询

文章目录

  • hive之高级查询
    • 一、Hive的数据查询
    • 二、Hive的数据加载和交换
    • 三、Hive的数据排序
    • 四、Hive的聚合运算
    • 五、Hive的窗口函数

一、Hive的数据查询

使用方法类似于MySQL,关键字和MySQL一样,不区分大小写

  1. limit
    用于控制输出的行数
  2. where —在group by之前,可以没有
    指定条件对数据进行筛选
  3. group by子句
    对查询的数据进行分组
  4. having子句
    对分组后数据进行进一步的条件筛选,与MySQL的用法一样,只能用在group by之后
  5. CTE和嵌套查询
    1)CTE
WITH t1 AS (SELECT) SELECT * FROM t1;
  1. 嵌套查询
SELECT * FROM (SELECT * FROM 表名) a;
  1. 关联查询 – JOIN发生在WHERE子句之前
    指对多表进行联合查询,JOIN用于将两个或多个表中的行组合在一起查询
    类似于SQL JOIN,但是Hive仅支持等值连接

    内连接:【INNER】 JOIN – 只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来
    外连接:OUTER JOIN — RIGHT JOIN, LEFT JOIN, FULL OUTER JOIN
    交叉连接:CROSS JOIN --笛卡儿积
    隐式连接:Implicit JOIN --不写join,两表进行笛卡儿积的关联
  2. hive中的Mapjoin
    详见:
  3. 集合操作–UNION
    1)使用条件:所有子集数据必须具有相同的名称和类型
    UNION ALL:合并后保留重复项
    UNION:合并后删除重复项(v1.2之后)
    2) 可以在顶层查询中使用(0.13.0之后)
    3)ORDER BY, SORT BY, CLUSTER BY, DISTRIBUTE BY 和LIMIT适用于合并后的整个结果
    4)集合其他操作可以使用JOIN/OUTER JOIN来实现—差集、交集
  4. 补充
    like 模糊查询
    rlike 模糊查询,支持正则匹配查询

二、Hive的数据加载和交换

  1. 使用INSERT语句将数据插入表/分区
//OVERWRITE(覆盖)/INTO(追加)
INSERT OVERWRITE/INTO TABLE 表名select fileds,... from 表名;//通过查询语句插入
insert overwrite table employee PARTITION (year, month) select 字段,'a','b' from 表名;//插入分区数据。字段需要一一对应,插入的是
insert into 表名(name) select 'John' from test limit 1 ;//通过指定列插入(insert into可以省略table关键字)
insert into 表名(name) value('Judy'),('John') ;//通过指定值插入

  1. 使用insert语句将数据插入/导出到文件
//从同一数据源插入本地文件,hdfs文件,表
insert overwrite local directory '路径'  select * from 表名;//加载到本地
insert overwrite directory '路径' select * from 表名;//加载到hdfs
insert overwrite table 表名 select * from 表名;//加载到表
// 以指定格式插入数据:默认数据以TEXT格式写入,列由^A分隔
insert overwrite directory '路径' row format delimited fields terminated by ',' select * from 表名;
//其他方式从表获取文件
hdfs dfs -getmerge <table_file_path> -- 表对应的文件
  1. 数据交换 - IMPORT/EXPORT
    IMPORT和EXPORT用于数据导入和导出:常用于数据迁移场景;除数据库,可导入导出所有数据和元数据
    1)使用IMPORT导入数据
IMPORT TABLE 表名 FROM '路径--到文件夹';
IMPORT TABLE 表名 partition (year=2014, month=11) FROM '路径--到文件夹';

2)使用EXPORT导出数据

EXPORT TABLE 表名 TO '路径--到文件夹';
EXPORT TABLE 表名 partition (year=2014, month=11) TO '路径--到文件夹';
  1. export与insert导出数据的区别
    export不仅可以导出数据,也可以将元数据一起导出(版本,表名,表结构、字段、字段类型。。),后期直接用import导入
    insert 只能导出数据,没有元数据

三、Hive的数据排序

详见:https://blog.csdn.net/little_sloth/article/details/107308752

四、Hive的聚合运算

  1. group by 用于分组
    1) hive中基本内置聚合函数与Group by一起使用
    2)如果没有指定group by 子句,则默认聚合整张表
    3)除聚合函数外,所选的其他列也必须包含在group by中
    4)group by支持使用case when表达式/if表达式
  2. having–对group by 聚合结果的条件过滤
    1)可以避免在group by之后使用子查询
    2)having之后可以使用表达式,但是不建议使用
// having使用
select sex_age.age from employee group by sex_age.age having count(*) <= 1;
// 使用子查询代替having
select a.age from ( select count(*) as cnt, sex_age.age from employee group by sex_age.age ) a where a.cnt <= 1;
  1. 基础函数
    1)基础聚合函数
    max, min, count, sum, avg
    max(distinct col1)、avg(col2)等
    2) collect_set, collect_list:返回每个组列中的对象集/列表
    set与list的区别
    set可以去重,list 不能
select city,collect_set(emp_id) from emp_psn group by city;
select city,collect_list(emp_id) from emp_psn group by city;

hive之高级查询_第1张图片

ps:一般与GROUP BY一起使用,可应用于列或表达式;对NULL的count聚合为0:select count(null) = 0

五、Hive的窗口函数

详见:https://blog.csdn.net/little_sloth/article/details/107447378

你可能感兴趣的:(hive,大数据,linux,hive,大数据)