在我的公司,我看到经常使用这两个命令,我想知道这些差异,因为它们的功能对我来说似乎是一样的:
create table <mytable>
(name string,
number double);
load data inpath '/directory-path/file.csv' into <mytable>;
create table <mytable>
(name string,
number double);
location '/directory-path/file.csv';
他们都将数据从HDFS上的目录复制到HIVE上的表目录中。使用这些产品时是否应该注意哪些差异?谢谢。
答案 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?