Hive数据查询

更多信息https://blue-shadow.top/

附书代码Github工程:https://github.com/Shadow-Hunter-X

SELECT子句

  • 针对复合类型列的查询(数组,字典,结构)
含有复合类型列的样表:
CREATE TABLE IF NOT EXISTS employees_t
(
    name STRING  COMMENT 'Employee name',
    salary FLOAT COMMENT 'Employee salary',
    subordinates ARRAY<STRING> COMMENT ' Names of subordinates',
    deducations  MAP<STRING,FLOAT> COMMENT ' Keys are deducations names , Values are percentags',
    address      STRUCT<street:STRING,city:STRING,state:STRING,zip:INT> COMMENT 'Home Address'
)
COMMENT 'the table of empoyee'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
数据样式:

mul_data_style

访问数组列,使用下标索引:
SELECT name , subordinates[0] FROM employees_t linit 3; 

array_sub

访问Map元素,使用键值索引
SELECT name , deducations["State Taxes"] FROM employees_t limit 3;

map_sub

访问struct中的元素,使用.
SELECT name , address.city FROM employees_t limit 3;

struct_sub

函数

对于Hive提供了丰富的内置函数,请查阅

Hive内置函数

JOIN子句

针对在标准SQL中定义个各种连接在Hive中都有相应支持,但是又去对于Hive的一些独特性。
  • Hive连接中对表的执行的顺序是从左到右,逐个扫描
    所以在查询中将的表的大小从左到右增加,这样可以达到优化的目的,将小表放到内存,提高执行速度
    开启的优化项:set hive.auto.convert.join=true;

  • LEFT SEMI-JOIN
    左半开表,放回左边表的记录,前提是其记录对于右边表满足ON语句中的判断条件

排序

*order by 和 sort by* order by 对执行的数据集进行一次全局排序,这样是通过一个reducer进行处理,当数据量很大的时候,将会很费时。 对于Hive中增加了sort by只会对每个reducer进行排序,进行一次局部的排序,只是保证每个reducer的输出是有序的。 有助于后续的全局排序提高效率。

由于order by 操作可能会造成运行时间很长,如果属性hive.mappred.mode的值是strict,那hive 查询中必须有limit 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值