Hive SQL使用指南(2)——表操作 2015-05-05 19:00

表操作

理论知识

Hivew的数据表分内部表和外部表两种表。

  • 内部表

内部表就是通过Hive自身创建的表,并由Hive本身来管理数据。
内部表使用LOCATION关键字时指定该表的存放在HDFS中位置。
在删除表时,内部表的数据会与表结构一起删除。

  • 外部表

外部表是通过Hive建立表的Metadata,并提供一些数据查询服务的表。比如一些HDFS文件,Pig,Hbase的文件都可以通过Hive进行批处理和查询。
创建表时通过增加External关键字指定表类型是外部表,通过LOCATION关键字指定外部表的数据存放位置。
在删除表时,外部表的数据不会被删除,只会删除表结构。

  • 其他

与RDBMS一样,可以使用COMMENT关键字来给字段和表添加注释。 与RDBMS不一样,Hive支持各种数据类型,常用的是string,bigint,double等。
日期类型也是使用string来存储。此外,Hive支持各种结构,如Map,Array,Struct,这些数据类型非常强大。 最后,Hive表还有一个TBLPROPERTIES用来给表添加一些描述信息,比如最后一次修改信息,最后一个修改人。

操作

  • 创建表
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TABLE choice(userid INT,classname STRING);
CREATE TABLE choice(userid INT,classname STRING) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

/* ROW FORMAT DELIMITED FIELDS TERMINATED BY指定读取的文本的数据分隔符,Hive默认的分隔符是:\u0001。*/
/* 文本格式 */
CREATE TABLE choice(userid INT,classname STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/data/hivedata/choice';

/* RCFILE格式 */
CREATE TABLE choice2(userid INT,classname STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS RCFILE;

/* SEQUENCEFILE格式 */
CREATE TABLE choice3(userid INT,classname STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS SEQUENCEFILE;

/* PARQUETFILE格式 */
CREATE TABLE choice3(userid INT,classname STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS PARQUETFILE;
  • 清空表
1
TRUNCATE TABLE choice;
  • 查询表
1
2
3
SHOW TABLES;
SHOW TABLES 'h*';
SHOW TABLES LIKE 'h*';
  • 查询表的详细信息
0: jdbc:hive2://ctrl:10000> DESC house_price;
+-----------+------------+----------+--+
| col_name  | data_type  | comment  |
+-----------+------------+----------+--+
| room      | string     |          |
| price     | float      |          |
+-----------+------------+----------+--+
2 rows selected (0.292 seconds)
0: jdbc:hive2://ctrl:10000>
0: jdbc:hive2://ctrl:10000> DESC house;
+--------------------------+-----------------------+-----------------------+--+
|         col_name         |       data_type       |        comment        |
+--------------------------+-----------------------+-----------------------+--+
| room                     | string                |                       |
| size                     | int                   |                       |
| city                     | string                |                       |
|                          | NULL                  | NULL                  |
| # Partition Information  | NULL                  | NULL                  |
| # col_name               | data_type             | comment               |
|                          | NULL                  | NULL                  |
| city                     | string                |                       |
+--------------------------+-----------------------+-----------------------+--+
8 rows selected (0.3 seconds)
  • 查询表的建表脚本
1
SHOW CREATE TABLE xxx_tbl;
0: jdbc:hive2://ctrl:10000> SHOW CREATE TABLE house;
+-----------------------------------------------------------------+--+
|                         createtab_stmt                          |
+-----------------------------------------------------------------+--+
| CREATE TABLE `house`(                                           |
|   `room` string,                                                |
|   `size` int)                                                   |
| PARTITIONED BY (                                                |
|   `city` string)                                                |
| ROW FORMAT DELIMITED                                            |
|   FIELDS TERMINATED BY ','                                      |
| STORED AS INPUTFORMAT                                           |
|   'org.apache.hadoop.mapred.TextInputFormat'                    |
| OUTPUTFORMAT                                                    |
|   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'  |
| LOCATION                                                        |
|   'hdfs://ctrl:9000/user/hive/warehouse/house'                  |
| TBLPROPERTIES (                                                 |
|   'transient_lastDdlTime'='1424872454')                         |
+-----------------------------------------------------------------+--+
15 rows selected (0.609 seconds)
0: jdbc:hive2://ctrl:10000>
  • 修改表
1
2
ALTER TABLE student RENAME TO place;
ALTER TABLE student REPLACE COLUMNS(id INT,city STRING);
  • 删除表
1
DROP TABLE student;
Tags: #Hive    Post on Hadoop