关于数据仓库Hive建表时的LOCATION参数问题

大数据学习路线图

关于数据仓库Hive建表时的LOCATION参数问题
在构建数据仓库Hive的表时,需要用到LOCATION参数,关于这个参数的用法,这里简单探讨一下。

在我们实验室制作的《大数据课程实验案例:网站用户行为分析》的“步骤一:本地数据集上传到数据仓库Hive”中(访问),有一段创建外部表的命令语句:

hive>  CREATE EXTERNAL TABLE dblab.bigdata_user(id INT,uid STRING,item_id STRING,behavior_type INT,item_category STRING,visit_date DATE,province STRING) COMMENT 'Welcome to xmu dblab!' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/bigdatacase/dataset';

上面这条命令,是在Hive中创建了一个外部表,名称为bigdata_user,这个表的数据是被保存在一个指定的HDFS目录中,也就是“hdfs://localhost:9000/bigdatacase/dataset”目录,由于该目录下已经存在一个文件user_table.txt,因此,这个user_table.txt文件里面的数据,就是外部表bigdata_user的输入数据,当在Hive中执行如下命令时:

hive>  use dblab;
hive> select * from bigdata_user limit 10;

上面命令执行时,查询的数据就是来自“hdfs://localhost:9000/bigdatacase/dataset/user_table.txt”。
下面可以继续做一些实验测试,来说明LOCATION这个参数的问题:

  1. 建外部表使用LOCATION,读取到数据,同时插入数据,会在LOCATION位置新生成文件000000_0,然我删除外部表,数据文件还在,证明外部表功能还在。
    2.我建内部表使用LOCATION,读取到数据,同时插入数据也会生成新文件,但如我删除内部表,数据文件都会消失,整个目录都会删除掉,也正好符合内部表的功能。
    3 我建立外部表,不使用LOCATION,会在默认在/hive/warehouse/数据库名称/表名 建立目录,然后插入数据,会生成新文件,删除表。目录和文件都还在。符合外部表功能。
  2. 建立内部表,不使用LOCATION。在相应位置创建新目录,插入数据,一样生成新文件。但是如果删除内部表,目录和数据文件都会删除掉。

对比一下,发现是否用LOCATION方式建表,会影响在HDFS是否生成新目录(表名)。但是不影响外部表和内部表的功能。