hive使用指南

创建库:create database base_name;

创建内/外部表:

CREATE EXTERNAL TABLE t_lxw1234 (

id INT,

ip STRING COMMENT ‘访问者IP’,

avg_view_depth DECIMAL(5,1),

bounce_rate DECIMAL(6,5)

) COMMENT ‘lxw的大数据田地-lxw1234.com’

PARTITIONED BY (day STRING)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘,’

STORED AS textfile

LOCATION ‘hdfs://cdh5/tmp/lxw1234/';

关键字EXTERNAL:
表示该表为外部表,如果不指定EXTERNAL关键字,则表示内部表

关键字COMMENT
为表和列添加注释

关键字PARTITIONED BY
表示该表为分区表,分区字段为day,类型为string

关键字ROW FORMAT DELIMITED
指定表的分隔符,通常后面要与以下关键字连用:

FIELDS TERMINATED BY ‘,’ //指定每行中字段分隔符为逗号

LINES TERMINATED BY ‘\n’ //指定行分隔符

COLLECTION ITEMS TERMINATED BY ‘,’ //指定集合中元素之间的分隔符

MAP KEYS TERMINATED BY ‘:’ //指定数据中Map类型的Key与Value之间的分隔符

举个例子:

create table score(name string, score map<string,int>)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘\t’

COLLECTION ITEMS TERMINATED BY ‘,’

MAP KEYS TERMINATED BY ‘:';

要加载的文本数据为:

biansutao ‘数学':80,’语文':89,’英语':95

jobs ‘语文':60,’数学':80,’英语':99

关键字STORED AS
指定表在HDFS上的文件存储格式,可选的文件存储格式有:

TEXTFILE //文本,默认值

SEQUENCEFILE // 二进制序列文件

RCFILE //列式存储格式文件 Hive0.6以后开始支持

ORC //列式存储格式文件,比RCFILE有更高的压缩比和读写效率,Hive0.11以后开始支持

PARQUET //列出存储格式文件,Hive0.13以后开始支持

关键词LOCATION
指定表在HDFS上的存储位置。

分区设置:
创建表时指定分区:

CREATE EXTERNAL TABLE t_lxw1234 (

id INT,

ip STRING COMMENT ‘访问者IP’,

avg_view_depth DECIMAL(5,1),

bounce_rate DECIMAL(6,5)

) COMMENT ‘lxw的大数据田地-lxw1234.com’

PARTITIONED BY (month STRING, day STRING)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ‘,’

STORED AS textfile;

使用INSERT添加分区:

往分区中追加数据:

INSERT INTO TABLE t_lxw1234 PARTITION (month = ‘2015-06′,day = ‘2015-06-15′)

SELECT * FROM dual;

覆盖分区数据:

INSERT overwrite TABLE t_lxw1234 PARTITION (month = ‘2015-06′,day = ‘2015-06-15′)

SELECT * FROM dual;

使用ALTER TABLE添加分区:
ALTER TABLE t_lxw1234 ADD PARTITION (month = ‘2015-06′,day = ‘2015-06-15′) location ‘hdfs://namenode/tmp/lxw1234/month=2015-06/day=2015-06-15/';

删除分区

可以使用 ALTER TABLE t_lxw1234 DROP PARTITION (month = ‘2015-01’, day = ‘2015-01-25’);

动态分区:http://lxw1234.com/archives/2015/06/286.htm

加载数据:
1.建表时候直接指定:
如果你的数据已经在HDFS上存在,已经为结构化数据,并且数据所在的HDFS路径不需要维护,那么可以直接在建表的时候使用location指定数据所在的HDFS路径即可。

CREATE [EXTERNAL] TABLE t_lxw1234 (
day STRING,
url STRING)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ' ' 
stored as textfile 
location '/tmp/lxw1234/';

这里内部表和外部表都可以指定,但需要注意,如果是内部表,那么在DROP该表的时候,同时会将LOCATION所指定的目录一起删除。

2 从本地文件系统或者HDFS的一个目录中加载

如果数据在本地,或者HDFS的某一个目录下,需要加载到目标中或分区中,那么使用LOAD DATA命令即可加载数据:

加载本地文件
LOAD DATA LOCAL INPATH ‘/home/lxw1234/t_lxw1234/’
INTO TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’);

加载HDFS文件
LOAD DATA INPATH ‘/user/lxw1234/t_lxw1234/’
INTO TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’);

3 从一个子查询中加载数据

这个比较简单,就是将一个查询结果插入到目标表或分区中:

INSERT overwrite TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’)
SELECT day,url from source_table;

4 导出Hive中的数据到文件系统
如果指定了LOCAL关键字,则为导出到本地文件系统,否则,导出到HDFS。使用ROW FORMAT关键字可以指定导出的文件分隔符,比如:

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/lxw1234/' 
  ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
SELECT * FROM t_lxw1234;

摘自:http://lxw1234.com/archives/category/hive/page/3

权限操作:
创建角色 CREATE ROLE ROLE_NAME
删除角色: DROP ROLE ROLE_NAME

把role_test1角色授权给jayliu用户,命令如下 grant role role_test1 to user jayliu;
查看jayliu用户被授权的角色,命令如下: SHOW ROLE GRANT user jayliu;
取消jayliu用户的role_test1角色,操作命令如下: revoke role role_test1 from user jayliu;

把某个库的所有权限给一个角色,角色给用户!
grant all on database user_lisi to role role_lisi;

把某个库的权限直接给用户!grant ALL ON DATABASE USER_LISI TO USER lisi;

收回权限 revoke ALL on database default from user lisi;

查看用户对数据看的权限 show grant user lisi on database user_lisi;

上一篇:K-Means聚类算法原理


下一篇:linux统计文件数量