hive数据库_hive_hive是什么意思

Hive SQL 是几乎每个互联网分析师的必备技能。 相信每个面试过大公司的孩子都有被面试官问Hive优化问题的经历。 因此,掌握扎实的HQL基础就显得尤为重要,这不仅可以帮助分析师在日常工作中变得更有效率,也可以帮助他们在跳槽时获得更好的工作offer。

本文是对 Hive 的介绍。 主要介绍Hive SQL的基本语法。 文章力求简洁全面,让大家在30分钟内上手HQL。

这篇文章有很多角度将HQL与关系数据库SQL进行比较,适合有一定SQL基础的童鞋。 (如果您还没有掌握基本的SQL,请前往“w3c – SQL”快速入门SQL)

———- 敬请关注Hive优化章节

1.Hive简介

简单来说,Hive是一个基于Hive的数据仓库工具。

Hive的计算是基于一种特殊的计算模型实现的,它可以将计算任务划分为多个处理单元,然后分发到一组家庭或服务器级别的硬件机器上,降低成本并提高水平可扩展性。

Hive 的数据存储在分布式文件系统 HDFS 上。

需要明确的是,Hive作为数据仓库应用工具,相比RDBMS(关系数据库)有三个“不能”:

无法像RDBMS那样实时响应,Hive查询延迟较大; 它不能像RDBMS那样进行事务性查询,因为Hive没有事务机制; 它无法像 RDBMS 那样执行行级更改操作(包括插入、更新和删除)。

另外,Hive是一个比RDBMS更加“松散”的世界,比如:

2.Hive查询语句

Hive的一般语法与Mysql等RDBMS SQL的语法几乎相同。 语法格式如下所示,不再详细解释。 本节重点介绍一下Hive中出现的以及我在日常生活中使用的一些特殊技术,供大家参考。

2.1 语法和词序注释

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY order_condition]
[DISTRIBUTE BY distribute_condition [SORT BY sort_condition] ]
[LIMIT number]

2.2 多维聚合分析集合/cube/,

下面通过一个例子来说明三者的功能和区别。 该表是后端请求表。 现在我们需要统计三个不同维度的聚合:总共有多少个请求? 针对不同的系统和设备有多少个请求? 不同城市有多少请求。

不使用多维聚合方法,

SELECT NULL, NULL, NULL, COUNT(*)
FROM requests
UNION ALL
SELECT os, device, NULL, COUNT(*)
FROM requests GROUP BY os, device
UNION ALL
SELECT null, null, city, COUNT(*)
FROM requests GROUP BY city;

使用集合,

SELECT os, device, city ,COUNT(*)
FROM requests
GROUP BY os, device, city GROUPING SETS((os, device), (city), ());

cube会将指定列的所有可能组合枚举为集合,并以分层聚合的方式生成集合。 喜欢,

GROUP BY CUBE(a, b, c)  
--等价于以下语句。  
GROUPING SETS((a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),())
GROUP BY ROLLUP(a, b, c)
--等价于以下语句。  
GROUPING SETS((a,b,c),(a,b),(a), ())

2.3 指定字段列的正则方法

说是指定,实际上是排除,如:`(num|uid)?+.+`排除了num和uid字段。

另外,where可以使用这样的正则表达式:where A Rlike B,where AB。

2.4 View(一行变成多行)

View与表生成功能(如Split等)结合使用,可以将一行数据拆分为多行数据,并对拆分后的数据进行聚合。

假设您有一个包含两列数据的表,第一列是广告 ID 的逗号分隔集合,第二列是广告 ID 的集合。

hive数据库_hive是什么意思_hive

现在如果需要统计所有页面上所有广告出现的次数,可以先用View+处理,然后就可以正常分组汇总统计了。

SELECT pageid, adid 
 FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;

hive_hive数据库_hive是什么意思

2.5 窗口函数

Hive的窗口函数非常丰富,这在很多RDBMS中是很少见的。 (至少在早期版本的mysql中,还没有支持窗口函数,并且分组排序需要使用非常复杂的SQL自定义变量)

其中,最常用的窗口函数是()over(by col order col_2),可以实现按指定字段进行分组和排序。

其他更丰富的窗口函数我就不赘述了。 空间太大,可以开新文章。 建议参考阿里云的《窗口函数》文档,非常详细,强烈推荐!

2.6 代码复用

with t1 as(
    select user_id
    from user
    where ...
)
@var:= select
         shop_id
       from shop
       where ...;
select *
from user_shop
where user_id in(select * from t1)
and shop_id in(select * from @var);

3.Hive定义语句(DDL)

3.1 Hive建表语句格式,

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注