最近在用Hive做多维数据分析,总结一些常用HiveQL命令。

1. 建表

以纯文本数据建表:

create table `dmp.dim_con_adx_id_name` (`adx_id` string comment 'ADX ID', `adx_name` string comment 'ADX名称', `update_dt` string comment '更新时间(天粒度)'
)
comment 'ADX的ID与名称映射表'
row format delimited
fields terminated by ','
stored as textfile
;

若未指定为外部表(external table),则默认为托管表(managed table)。二者的区别在于load与drop操作:托管表用load data inpath加载数据(路径可为本地目录,也可是HDFS目录),该操作会将该文件放在HDFS目录:/user/hive/warehouse/ 下;而外部表的数据是在location中指定,一般配合partition描述数据的生成信息;drop托管表时会将元数据与/user/hive/warehouse/下的数据一起删掉,而drop外部表时只会删除元数据。将本地文件加载到托管表:

load data local inpath 'adx.csv' overwrite into table dmp.dim_con_adx_id_name;

以orc file数据建外部表表:

create external table `dmp.dwd_evt_ad_user_action_di` (`uid` string comment '用户ID', `adx_name` string comment 'ADX名称', `media_name` string comment '媒体名称', `is_exposure` string comment '是否曝光', `is_click` string comment '是否点击'
)
comment '广告用户点击天表'
partitioned by (dt string comment '天分区')
stored as orc
location '/<hdfs path>'
;

2. Partition

增加partition并指定location:

alter table dmp.dwd_evt_ad_user_action_di add if not exists partition (dt='20160520') location '20160520';

重新设置partition的location:

-- must be an absolute path
alter table dmp.dwd_evt_ad_user_action_di partition (dt='20160520') set location '<hdfs path>';  

删除partition

alter table dmp.dwd_evt_ad_user_action_di drop if exists partition (dt='20160520') ignore protection;

查看所有的paritition,以及查看某一partition的详细信息:

show partitions dwd_evt_ad_user_action_di;describe formatted dwd_evt_ad_user_action_di partition (dt='20160520');

3. UDF

Hive的UDF非常丰富,基本能满足大部分的需求。

正则匹配获取相应字符串:

regexp_extract(dvc_model, '(.*)_(.*)', 2) as imei

复杂数据类型map、struct、指定schema的struct、array、union的构造如下:

map(key1, value1, key2, value2, ...)
struct(val1, val2, val3, ...)
named_struct(name1, val1, name2, val2, ...)
array(val1, val2, ...)
create_union(tag, val1, val2, ...)

获取复杂数据类型的某列值:

array: A[n]
map: M[key]
struct: S.x

条件判断case when,比如,在left join中指定默认值:

select uid, media, case when b.tags is NULL then array(named_struct('tag','EMPTY', 'label','EMPTY'))        else b.tagsend as tags
from (select uidfrom dwd_evt_ad_user_action_diwhere dt = '{biz_dt}'and is_exposure = '1'
) a
left outer join dwb_par_multi_user_tags_dd b
on a.uid = b.uid;

4. UDTF

UDTF主要用来对复杂数据类型进行平铺操作,比如,explode平铺array与map,inline平铺array<struct>;这种内置的UDTF要与lateral view配合使用:

select myCol1, col2 FROM baseTable
lateral view explode(col1) myTable1 AS myCol1;select uid, tag, label
from dwb_par_multi_user_tags_dd
lateral view inline(tags) tag_tb;
-- tags: array<struct<tag:string,label:string>>

5. 多维分析

Hive 提供grouping set、rollup、cube关键字进行多维数据分析,可以解决自定义的维度组合、上钻维度(\(n+1\)种)组合、所有的维度组合(\(2^n\)种)的需求。比如:

SELECT a, b, SUM( c )
FROM tab1
GROUP BY a, b GROUPING SETS ( (a, b), a, b, ( ) )-- equivalent aggregate query with group by
SELECT a, b, SUM( c ) FROM tab1 GROUP BY a, b
UNION
SELECT a, null, SUM( c ) FROM tab1 GROUP BY a, null
UNION
SELECT null, b, SUM( c ) FROM tab1 GROUP BY null, b
UNION
SELECT null, null, SUM( c ) FROM tab1GROUP BY a, b, c, WITH ROLLUP
-- is equivalent to
GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (a), ( ))GROUP BY a, b, c WITH CUBE
-- is equivalent to
GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (b, c), (a, c), (a), (b), (c), ( ))

此外,Hive还提供了GROUPING__ID函数对每一组合的维度进行编号,以区分该统计属于哪一维度组合,比如:

select adx_name, media_name, grouping__id, count(*) as pv
from dwd_evt_ad_user_action_di
group by adx_name, media_name with rollup;

以指定分隔符保存结果到本地目录:

explain
INSERT OVERWRITE LOCAL DIRECTORY '/home/<path>/<to>'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
select media_name, count(distinct uid) as uv
from dwd_evt_ad_user_action_di
where day_time = '2016-05-20' and is_exposure = '1'
group by media_name;

转载于:https://www.cnblogs.com/en-heng/p/5513176.html

常用HiveQL总结相关推荐

  1. hive load data外部表报错_从0开始学大数据-Hive基础篇

    Hive起源于Facebook,是基于 Hadoop HDFS 分布式文件系统的分布式 数据仓库 架构.它为数据仓库的管理提供了许多功能:数据ETL(抽取.转换和加载)工具.数据存储管理和大型数据集的 ...

  2. 大数据学习之Hive

    什么是Hive Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取.转化.加载,这是一种可以存储.查询和分析存储在Hadoop中的大规模数据的机制.hive数据仓库工具能将结构化的数据文件 ...

  3. 西南大学大数据8天实训

    大数据实训第一天日志 第一天 第二天 第三天 第四天 第五天 第六天 第七天 第八天 学习内容总结 CentOS安装 安装vmWare workstation 添加虚拟机,安装CentOS操作系统 配 ...

  4. 计算机学研究生课程,厦门大学计算机学系研究生课程.doc

    厦门大学计算机学系研究生课程 厦门大学计算机科学系研究生课程 <> 主讲教师:林子雨 二零一年月 目录 一. Hive简介1 二. Hive安装1 三. Hive配置3 四. Hive的常 ...

  5. HiveQL学习笔记(二):Hive基础语法与常用函数

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  6. Hadoop综合大作业补交4次作业:获取全部校园新闻,网络爬虫基础练习,中文词频统计,熟悉常用的Linux操作...

    1.用Hive对爬虫大作业产生的文本文件(或者英文词频统计下载的英文长篇小说)进行词频统计. (1)开启所有的服务,并创建文件夹wwc (2)查看目录下所有文件 (3)把hdfs文件系统中文件夹里的文 ...

  7. HiveSQL常用优化方法全面总结

    转载自  HiveSQL常用优化方法全面总结 Hive作为大数据领域常用的数据仓库组件,在平时设计和查询时要特别注意效率.影响Hive效率的几乎从不是数据量过大,而是数据倾斜.数据冗余.job或I/O ...

  8. sql优化常用的几种方法_Hive常用性能优化方法实践全面总结

    Apache Hive作为处理大数据量的大数据领域数据建设核心工具,数据量往往不是影响Hive执行效率的核心因素,数据倾斜.job数分配的不合理.磁盘或网络I/O过高.MapReduce配置的不合理等 ...

  9. HiveQL学习笔记(四):Hive窗口函数

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

最新文章

  1. 使用bitblt提高GDI+绘图的效率(转)
  2. 古剑奇谭二服务器维护,《古剑奇谭二》10月4日例行维护更新公告
  3. c语言map函数k v都是int,Go语言sync.Map(在并发环境中使用的map)
  4. leaflet知识整理
  5. java 资料大全-转
  6. 专家答疑:在ERP系统中确保销售订单准确性
  7. DataNode的流式接口
  8. 迁移学习中使用下载好的权重
  9. radare2命令介绍
  10. 给oracle数据库某一列数据的前面或者后面增加字符,合并两列的值
  11. MATLAB--黄金分割法
  12. 当下最实用计算机编程语言,目前最流行的计算机编程语言是什么?
  13. 微博热搜数据变化趋势视频化展示
  14. Ubuntu 18.04安装全面战争三国游戏 (by quqi99)
  15. Pytorch如何约束神经网络中权重/偏执的范围
  16. 汇率实时行情查询接口
  17. iPhone手机 -- 如何找到开发者选项
  18. MIT6.828_HW9_barriers
  19. 跳出IT运维“死循环” 看河南省统计局如何“运”筹“维”幄
  20. 南邮 OJ 1446 嘉娃的难题

热门文章

  1. 王者服务器维修2019年四月份,2019王者荣耀4周年庆版本更新时间介绍[图]
  2. Linux redis安装教程,Linux 下redis5.0.0安装教程详解
  3. 真刑啊!蔚来员工用公司服务器挖矿,已供认不讳
  4. 最新曝光的iPhone大漏洞:传文件会泄露个人隐私,2年多了苹果知而不改
  5. 北航成AAAI 2021最大赢家,两篇一作斩获最佳论文、提名奖,研究皆与Transformer相关...
  6. 移动开发必须要了解的易盾加固生态
  7. 【作死】更新macOS Mojave后Vagrant无法使用
  8. android--------Socket的简单了解
  9. 华为交换机SSH登录失败原因
  10. 判断分辨网站是否伪静态的方法