欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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&amp;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 /

Hive内部表和外部表

6. 删除表

drop table tbl_line;
drop table tbl_line_loc;
drop table tbl_line_ext;

7. 再次查看hdfs路径

hadoop fs -ls -R /

内部表删除会删除hdfs对应的路径,外部表删除不会删除hdfs对应的路径。

Hive内部表和外部表

相关标签: # Hive