创建库: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;