HiveQL 查询

1. 创建表
CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
PARTITIONED BY (country STRING, state STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '|'
MAP KEYS TERMINATED BY ':';
数据内容:
John Doe,100000.0,MarySmith|Todd Jones,Federal Taxes:.2|State Taxes:.05|Insurance:.1,1 MichiganAve.|Chicago|IL|60600
MarySmith,80000.0,Bill King,Federal Taxes:.2|State Taxes:.05|Insurance:.1,100Ontario St.|Chicago|IL|60601
ToddJones,70000.0,,Federal Taxes:.15|State Taxes:.03|Insurance:.1,200 ChicagoAve.|Oak Park|IL|60700
BillKing,60000.0,,Federal Taxes:.15|State Taxes:.03|Insurance:.1,300 ObscureDr.|Obscuria|IL|60100

2. 基本查询:
查询整个表: select * from employees;
查询单个字段:   select name from employees;
查询数组:  select subordinates from employees;
                    select subordinates[0] from employees;
查询MAP:   select deductions from employees;
                   select deductions['Federal Taxes'] from employees;
查询结构体:  select address from employees;
                       select address.street from employees;
使用分区过滤: select * from employees where country = 'CHINDA';
可以使用任意字段放在where 谓词中

3. 数据函数,计算数值
select bigint(salary) from employees;

4. 聚合函数
select sum(salary) from employees group by country;
select sum(salary) from employees group by address.street;

5. 表生成函数,一个字段裂成多行
select explode(subordinates) as sub from employees;
另外更多内置函数,可查询文档

6. 嵌套查询
select tmp_table.name from (select name, salary  from employees) tmp_table;

7. case when
select sum(case when country = 'US' then salary end) as cc  from employees group by country;

8. sort by 和 order by 
order by 是正常排序
sort by 会现在每个reducer 中先执行排序

9. distribute 按某个字段分区后 在每个reducer上排序
select country, state, name, salary  from employees distribute by country sort by country, state;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值