Hive编程指南

第一二章、基本操作

1.set命令

会打印出命名空间,hivevarhiveconfsystemenv所有的变量。

还可以给变量附新的值。

2.Hive中‘一次使用命令’

将结果保存起来

[ffcs@nn71 bin]$ hive -S -e "select * from emp" > /home/ffcs/hive-0.13.0-bin/examples/files/mydata/copy_emp;

3.从文件中执行Hive查询

首先保存为具有.q或者.hql后缀名的文件

hive /home/ffcs/hive-0.13.0-bin/examples/files/mydata/hive_f_test.q(测试没有数据,可能是数据库选的不正确)

Hive shell中可以使用source

source /home/ffcs/hive-0.13.0-bin/examples/files/mydata/hive_f_test.q;

4.如何显示字段

通过设置hiveconf配置项hive.cli.print.headertrue来开启这个功能

set hive.cli.print.header=true;

第三章、数据类型和文件格式

1.timestamp

    新增数据类型timestamp,可以是整数,距离Unix新纪元(197011日,午夜12点)的秒数,也可以是浮点数,秒数精确到纳秒(小数点后保留9位),还可以是字符串,即JDBC所约定的时间字符串格式,YYYY-MM-DD hh:mm:ss.fffffffff

2.三种集合数据类型

创建表

hive> create table employees(

    > name string,

    > salary float,

    > subordinates array<string>,

    > deductions map<string,float>,

    > address struct<strate:string, city:string, state:string>

    > )

    > row format delimited

    > fields terminated by ','

    > collection items terminated by '*'

    > map keys terminated by '$'

> stored as textfile;

元素之间的分隔符为’*’

键和值之间的分隔符为’$’

列之间的分隔符为’,’

 

第四章、数据定义

1.创建数据库

craete databsse mydb

2.通过正则表达式查询数据库

show database like ‘h.*’

3.修改数据库的存储位置

Create database mydb location ‘/home/ffcs/...’ 

4.显示数据库的目录

describe database mydb;

5.显示当前数据库

没有命令可以显示当前使用的数据库

可以通过设置属性来显示

hive> set hive.cli.print.current.db=true;

hive (mydb)> set hive.cli.print.current.db=false;

6.删除数据库

drop database mydb

7.查看表结构信息

describe extended emp;

8.查看所有分区

show partitions emp;

9.创建外部表

create external table if not exists ex_emp(

     id string,

     name string)

     row format delimited fields terminated by ','

     location '/home/ffcs/hive-0.13.0-bin/examples/files/mydata';(不能直接显示mydata文件下的文本)

10.表重命名

Alter table emp1 rename to emp2

11.创建分区

 

11增加分区

alter table t_p_employees add partition(country='China',state='lianhe'); 

12删除分区

ALTER TABLE page_view

DROP PARTITION (dt='2008-08-08', country='us');

 

第五章 HiveSQL数据操作

1.向管理表中加载数据

说明: 

如果使用local关键字,这个路径是本地文件系统的路径,数据将会被拷贝到目标位置;如果省略local,这个路径是分布式文件系统中的路径,数据从这个路径转移到目标位置。数据加载

 

2.通过查询向表中插入数据

以覆盖的形式插入:

 

以追加的方式插入:

 

3.动态分区插入

说明:动态分区的默认功能是没有开启

可以通过命令查看

 

默认为严格,在这种模式下要求至少有一列分区是静态的。这样有助于阻止因设计错误导致查询产生大量的分区,错误使用时间戳作为分区。

修改为nostrict后可以动态分区

 

也可以动态静态分区混合,但静态分区键必须出现在动态分区键之前。

4.通过查询加载数据

ceate table e as select * from emp;

5.导出数据

insert overwrite local directory '/home/ffcs/hive-0.13.0-bin/examples/files/F_shifx1.txt'

> select * from emp;

 

 

 

第六章、HiveQL查询

1.数组查询方法

 

2.键值查询方法

 

3.结构体查询

 

4.表生成函数

explode()

返回0到多行结果,每行都对应输入的array数组中的一个元素

5.case when

 

 

6.连接查询

内连接

On子句指定了两个表之间的数据连接条件,where字句限制了左边表的是哪个记录,右边表是那个记录。

select p_emp.* from p_emp join p_emp2 on p_emp.a=p_emp2.a;

select * from emp join emp2 on emp.id=emp2.id;

默认将大表放在后面,以增加查询速度

select /*+streamtable(s)*/ emp.id,emp.name,emp2.name from emp join emp2 on emp.id=emp2.id; 

Where子句在连接查询后才会执行

Left semi join(左半开连接,不支持右半开连接)

相当于in hive不支持in查询。

Select s.id,name from table_name s

Where s.id,s.name in(select d.id,d.name from dev d);(不支持)

Select s.id,s.name from table_name s left semi join dev d on s.id=d.id and s.name=d.name;

 

Map-side join将小表放入内存中

7.order by  sort by的区别

Order by 是对所有的进行排序,而sort by 只对每个reducer中的数据进行排序,不能保证整体的顺序。

8.sort by 和 distribute by 

Distribute by 控制map 的输出在reducer中是如何划分的。

9.Cluster by

将相同的数值分配到同一个桶中。

Select ... From ... Where ... Cluster by id;

10.抽样查询

 

3是代表被散列的桶的个数,10表示总共桶的个数

 

第七章、视图

第八章、模式设计

1.同一份数据多种处理

(需要两次扫描表)

insert overwrite table sales

select * from history where action = ‘purchased’;

select * from history where action = ‘returned’;

(只需一次扫描)

from history

insert overwrite sales select * where action = ‘purchased’;

insert overwrite sales select * where action = ‘returned’;

2.分桶表数据处理

create table ...

partitioned by ...

clustered by (user_id) into 96 buckets;

强制hive为目标表的分桶初始化设置一个正确的reducer个数

Set hive.enforce.bucketing = true

如果没有设置这个,则要自己设置和分桶个数相匹配的reducer个数。

例如

Set mapred.reduce.tasks=96,然后在insert 语句中,需要使用select 语句增加cluster by.

3.增加列

Alter table 表名 add columns (user_id string)

 

第十章、调优

1.执行的详细过程

查询前加explain 

2.并行执行

设置参数

Hive.exec.parallel true

3.严格模式

通过设置属性

Hive.mapred.mode 的值为true可以禁止三种类型的查询

第一个:对于分区表,一定要有where筛选条件

第二个:对于order by 语句,一定要有limit

第三个:限制笛卡尔积的查询

第十三章、函数

1.查看函数

Show functions;

2.函数的简短介绍

desccribe function concat;

3.详细说明

describe function extended concat

4.表生成函数

Explore的错误使用(查询每个人的下属员工)

Select exploresubordinate) from employees

Hive提供一个lateral view

Select lateral view exploresubordinate) from employees;

5.自定义函数

一个自定义函数需要继承UDF类并实现evaluate()函数;

编写完成生成jar包,放入对应的路径下,创建函数,使用函数

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值