Hive内部表和外部表
程序员文章站
2022-05-01 11:11:56
...
一:内部表和外部表的区别
- 创建表时使用关键字
external
创建的表就是外部表,没有使用该关键字创建的表就是内部表。 - 删除表时(drop table)内部表会删除hdfs对应路径,而外部表不会删除hdfs对应的路径, 删除表无论是内部表和外部表都会删除元数据(metastore.TBLS、metastore.COLUMNS_V2)
二:location关键字
用于指定hdfs路径,如果不指定则使用默认的路径,默认路径规则为/<hive.metastore.warehouse.dir>/<数据库名称>.db/<表名>
,location既可以用于内部表也可以用于外部表。
hive-site.xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/data/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore?characterEncoding=UTF-8&createDatabaseIfNotExist=true</value>
</property>
三:测试
1. 创建普通的内部表
create table tbl_line(line string)
row format delimited
fields terminated by '\n'
stored as textfile;
2. 使用location关键字创建内部表
create table tbl_line_loc(line string)
row format delimited
fields terminated by '\n'
stored as textfile
location "/line/loc";
3. 使用external
关键字创建外部表
create external table tbl_line_ext(line string)
row format delimited
fields terminated by '\n'
stored as textfile;
4. 加载数据
echo "Hadoop Common\nHadoop Distributed File System\nHadoop YARN\nHadoop MapReduce " > /tmp/foobar.txt
hive> load data local inpath '/tmp/foobar.txt' into table tbl_line;
hive> load data local inpath '/tmp/foobar.txt' into table tbl_line_loc;
hive> load data local inpath '/tmp/foobar.txt' into table tbl_line_ext;
5. 查看hdfs路径
hadoop fs -ls -R /
6. 删除表
drop table tbl_line;
drop table tbl_line_loc;
drop table tbl_line_ext;
7. 再次查看hdfs路径
hadoop fs -ls -R /
内部表删除会删除hdfs对应的路径,外部表删除不会删除hdfs对应的路径。
上一篇: Hadoop_WordCount单词统计
下一篇: MySQL 5.7增强半同步测试