sql—配置单元中“load data inpath”和“location”之间的区别?

wd2eg0qa  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(763)

在我的公司,我经常看到这两个命令被使用,我想知道它们的区别,因为它们的功能在我看来是一样的:

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上表的目录中。在使用这些工具时,有没有应该注意的差异?谢谢您。

x8diyxa7

x8diyxa71#

是的,它们的用途完全不同。
load data inpath命令用于将数据加载到配置单元表中“本地”表示输入文件在本地文件系统上。如果省略了'local',那么它将在hdfs中查找该文件。

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

location关键字allow指向其存储的任何hdfs位置,而不是存储在配置属性hive.metastore.warehouse.dir指定的文件夹中。
换言之,用特定的 LOCATION '/your-path/' ,配置单元不使用此表的默认位置。如果您已经生成了数据,这会很方便。
记住,只能在外部表上指定位置。对于常规表,将使用默认位置。
总而言之,加载数据inpath tell hive在何处查找输入文件,location关键字告诉hive在hdfs上的何处保存输出文件。
参考文献:https://cwiki.apache.org/confluence/display/hive/gettingstartedhttps用法:/cwiki.apache.org/confluence/display/hive/languagemanual+ddl

sr4lhrrt

sr4lhrrt2#

选项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文件位置。
看看这个关于内部和外部表用例的相关se问题
配置单元内部表和外部表之间的区别?

相关问题