在hive中`load data inpath`和`location`之间的区别?

时间:2016-02-18 05:57:56

标签: sql hadoop hive hdfs hiveql

在我的公司,我看到经常使用这两个命令,我想知道这些差异,因为它们的功能对我来说似乎是一样的:

1

create table <mytable> 
(name string,
number double);

load data inpath '/directory-path/file.csv' into <mytable>; 

2

create table <mytable>
(name string,
number double);

location '/directory-path/file.csv';

他们都将数据从HDFS上的目录复制到HIVE上的表目录中。使用这些产品时是否应该注意哪些差异?谢谢。

2 个答案:

答案 0 :(得分:9)

是的,它们完全用于不同目的。

加载数据inpath 命令用于将数据加载到hive表中。 &#39; LOCAL&#39;表示输入文件位于本地文件系统上。如果&#39; LOCAL&#39;省略,然后它在HDFS中查找文件。

load data inpath '/directory-path/file.csv' into <mytable>; 
load data local inpath '/local-directory-path/file.csv' into <mytable>;

LOCATION 关键字允许指向其存储的任何HDFS位置,而不是存储在配置属性 hive.metastore.warehouse.dir 指定的文件夹中。

换句话说,使用指定的LOCATION '/your-path/',Hive不会为此表使用默认位置。如果您已经生成了数据,这会派上用场。

请记住,LOCATION只能在EXTERNAL表上指定。对于常规表,将使用默认位置。

总结一下, 在路径中加载数据告诉hive在哪里查找输入文件, LOCATION 关键字告诉hive在HDFS上保存输出文件的位置。

参考文献: https://cwiki.apache.org/confluence/display/Hive/GettingStarted https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

答案 1 :(得分:4)

选项1:内部表格

create table <mytable> 
(name string,
number double);

load data inpath '/directory-path/file.csv' into <mytable>; 

此命令将删除源目录中的内容并创建内部表

选项2:外部表格

 create table <mytable>
 (name string,
 number double);

location '/directory-path/file.csv';

创建外部表格并将数据复制到表格 。现在数据不会从源头移动。您可以删除外部表,但仍然可以获得源数据。

当您删除外部表时,它只会删除HIVE表的元数据。数据仍存在于HDFS文件位置。

查看有关内部和外部表格用例的相关SE问题

Difference between Hive internal tables and external tables?