我使用以下内容在Hive
中创建了一个外部表:
create external table hpd_txt(
WbanNum INT,
YearMonthDay INT ,
Time INT,
HourlyPrecip INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
stored as textfile
location 'hdfs://localhost:9000/user/hive/external';
现在,此表在位置*/hive/external
中创建。
步骤1:我使用以下方法在此表中加载数据:
load data inpath '/input/hpd.txt' into table hpd_txt;
数据已成功加载到指定路径(*/external/hpd_txt
)
第2步:我使用以下内容从*/hive/external
路径删除该表:
hadoop fs -rmr /user/hive/external/hpd_txt
问题:
*/input/hpd.txt
已从hdfs中删除,但表已在*/external
路径中创建)提前致谢。
答案 0 :(得分:1)
Hive不知道您删除了这些文件。 Hive仍然希望在您指定的位置找到文件。您可以在HDFS中执行任何操作,但这不会传达给配置单元。如果事情发生变化,你必须告诉蜂巢。
hadoop fs -rmr /user/hive/external/hpd_txt
例如,上面的命令不会删除它只删除文件的表。该表仍存在于hive Metastore中。如果要删除表,请使用:
drop if exists tablename;
由于您将表创建为外部表,因此将从hive中删除该表。如果您没有删除它们,文件将保留。如果要删除外部表以及表正在读取的文件,可以执行以下操作之一:
最后,hive的Metastore的位置默认位于/usr/hive/warehouse
。
答案 1 :(得分:0)
EXTERNAL 关键字允许您创建表格并提供LOCATION,以便Hive不使用此表格的默认位置。如果您已经生成了数据,这将非常方便。否则,您将加载数据(通常或通过在hive表指向的目录中创建文件) 删除EXTERNAL表时,表中的数据不会从文件系统中删除。 EXTERNAL表指向其存储的任何HDFS位置,而不是存储在配置属性hive.metastore.warehouse.dir指定的文件夹中。
来源:Hive docs
因此,在您的步骤2中,删除文件/ user / hive / external / hpd_txt将删除数据源(指向该表的数据),但该表仍然存在并将继续指向hdfs:// localhost:9000 / user / hive / external创建时
@Anoop:不确定这是否能回答你的问题。如果您有任何疑问,请与我联系。答案 2 :(得分:0)
请勿使用加载路径命令。加载操作用于将数据移动(不复制)到相应的Hive表中。使用put或copyFromLocal将文件从非HDFS格式复制到HDFS格式。只需在执行put命令后在create table中提供HDFS文件位置。
删除表不会从磁盘中删除HDFS文件。这是外部表的优点。 Hive表只存储元数据以访问数据文件。 Hive表将数据文件的实际数据存储在HIVE表中。如果删除表,则数据文件在HDFS文件位置不受影响。但是在内部表格的情况下,如果删除表格,将删除元数据和数据。
答案 3 :(得分:0)
在通过您帮助评论和其他帖子后,我找到了回答我的问题。 如果我使用LOAD INPATH命令,则它将源文件“移动”到创建外部表的位置。虽然,在丢桌的情况下不会受到影响,但改变位置并不好。因此,如果在内部表中加载数据,请使用local inpath。
要从位于HDFS中的文件加载外部表中的数据,请使用CREATE表查询中将指向源文件的位置,例如:
create external table hpd(WbanNum string,
YearMonthDay string ,
Time string,
hourprecip string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
stored as textfile
location 'hdfs://localhost:9000/input/hpd/';
因此,此示例位置将指向此路径中HDFS中已存在的数据。所以这里不需要使用LOAD INPATH命令。</ p>
将源文件存储在其专用专用目录中是一种很好的做法。因此,在创建外部表时没有歧义,因为数据位于正确管理的目录系统中。
非常感谢帮助我理解这个概念!干杯!