### 11.1 实验目的 1. 学会创建Hive的表; 2. 显示Hive中的所有表; 3. 显示Hive中表的列项; 4. 修改Hive中的表并能够删除Hive中的表。 ### 11.2 实验要求 1. 要求实验结束时; 2. 每位学生均能够完成Hive的DDL操作; 3. 能够在Hive中新建,显示,修改和删除表等功能。 ### 11.3 实验原理 Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。 Hive中所有的数据都存储在HDFS中,Hive中包含以下数据模型:表(Table),外部表(External Table),分区(Partition),桶(Bucket)。 Hive中Table和数据库中 Table在概念上是类似的,每一个Table在Hive中都有一个相应的目录存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。 ### 11.4 实验步骤 #### 11.4.1 启动Hive 启动Hive命令行。 ~~~ [root@client ~]# cd /usr/cstor/hive/ [root@client hive ]# bin/hive ~~~ #### 11.4.2 创建表 默认情况下,新建表的存储格式均为Text类型,字段间默认分隔符为键盘上的Tab键。 创建一个有两个字段的pokes表,其中第一列名为foo,数据类型为INT,第二列名为bar,类型为STRING。 ~~~ hive> CREATE TABLE pokes (foo INT, bar STRING) ; ~~~ 创建一个有两个实体列和一个(虚拟)分区字段的invites表。 ~~~ hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING) ; ~~~ 注意:分区字段并不属于invites,当向invites导入数据时,ds字段会用来过滤导入的数据。 #### 11.4.3 显示表 显示所有的表。 ~~~ hive> SHOW TABLES ; ~~~ 显示表(正则查询),同MySQL中操作一样,Hive也支持正则查询,比如显示以.s结尾的表。 ~~~ hive> SHOW TABLES '.*s'; ~~~ #### 11.4.4 显示表列 ~~~ hive> DESCRIBE invites; ~~~ #### 11.4.5 更改表 修改表events名为3koobecaf (自行创建任意类型events表): ~~~ hive> ALTER TABLE events RENAME TO 3koobecaf; ~~~ 将pokes表新增一列(列名为new\_col,类型为INT): ~~~ hive> ALTER TABLE pokes ADD COLUMNS (new_col INT); ~~~ 将invites表新增一列(列名为new\_col2,类型为INT),同时增加注释“a comment”: ~~~ hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment'); ~~~ 替换invites表所有列名(数据不动): ~~~ hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2'); ~~~ #### 11.4.6 删除表(或列) 删除invites表bar 和 baz 两列: ~~~ hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column'); ~~~ 删除pokes表: ~~~ hive> DROP TABLE pokes; ~~~ ### 11.5 实验结果 上述实验步骤的结果如下图所示: 创建一个有两个字段的pokes表,如图11-1所示。 ![](https://box.kancloud.cn/18d4d29926280f8416211164cd921d7a_306x53.jpg) 图11-1 创建一个有两个实体列和一个(虚拟)分区字段的invites表,如图11-2所示。 ![](https://box.kancloud.cn/fe68df5d0c34e83f13a036d04c5e66fa_486x56.jpg) 图11-2 显示所有的表,如图10-3所示。 ![](https://box.kancloud.cn/882f8d99e8e80628490f275553b2ac40_281x81.jpg) 图11-3 以.s结尾的表,如图11-4所示。 ![](https://box.kancloud.cn/e72011bd8011f8e3163f9bd3bd7e2ea7_287x82.jpg) 图11-4 显示表列,如图11-5所示。 ![](https://box.kancloud.cn/aed78a35248fff5c5b584bb3f31a8983_382x178.jpg) 图11-5 修改表events名为3koobecaf (自行创建任意类型events表),如图11-6所示。 ![](https://box.kancloud.cn/661fd387248bbafdf4047f613d297614_299x55.jpg) 图11-6 将pokes表新增一列(列名为new\_col,类型为INT),如图11-7所示。 ![](https://box.kancloud.cn/b2d38dd1ef7d0e8aab4c7a4b128004c7_327x55.jpg) 图11-7 将invites表新增一列(列名为new\_col2,类型为INT),如图11-8所示。 ![](https://box.kancloud.cn/daae78f41c8767a98ed4d062fbbbff9c_487x56.jpg) 图11-8 替换invites表所有列名,如图11-9所示。 ![](https://box.kancloud.cn/e71731d7bd40a63152f545b0f4a493f3_479x37.jpg) 图11-9 删除invites表bar 和 baz 两列,如图11-10所示。 ![](https://box.kancloud.cn/e7b7bc67e19adfd146f6811431f7b971_478x46.jpg) 图11-10 删除pokes表,如图11-11所示。 ![](https://box.kancloud.cn/b99fdbd5a87d85ccfdefe285a7c6d5a7_188x59.jpg)