在我的公司,我经常看到这两个命令被使用,我想知道它们的区别,因为它们的功能在我看来是一样的:
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条答案
按热度按时间x8diyxa71#
是的,它们的用途完全不同。
load data inpath命令用于将数据加载到配置单元表中“本地”表示输入文件在本地文件系统上。如果省略了'local',那么它将在hdfs中查找该文件。
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
sr4lhrrt2#
选项1:内部表格
此命令将删除源目录中的内容并创建一个内部表
选项2:外部表
创建外部表并将数据复制到表中。现在数据将不会从源位置移动。您可以删除外部表,但源数据仍然可用。
删除外部表时,它只删除配置单元表的元数据。数据仍然存在于hdfs文件位置。
看看这个关于内部和外部表用例的相关se问题
配置单元内部表和外部表之间的区别?