当从HDFS加载数据到Hive时,使用
LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;
这个命令似乎是将hdfs_file移动到hive/warehouse
目录中。
是否可能(如何?)将它复制而不是移动,以便文件可以被另一个进程使用。
根据你的问题,我认为你已经在HDFS中有了数据。
因此,你不需要使用LOAD DATA
将文件移动到默认的Hive位置/user/hive/warehouse
。你可以使用external
关键字来定义表,这样可以将文件保留在原地,但是在Hive元存储中创建表的定义。详见:
创建表DDL
例如:
create external table table_name (
id int,
myfields string
)
location '/my/location/in/hdfs';
请注意,您使用的格式可能与默认格式不同(正如JigneshRawal在评论中提到的那样)。例如,在使用Sqoop时,您可以使用自己的分隔符:row format delimited fields terminated by ','
有一种替代'LOAD DATA'的方法,数据不会从现有源位置移动到Hive数据仓库位置。
您可以使用带有'LOCATION'选项的ALTER TABLE命令。下面是所需的命令:
ALTER TABLE table_name ADD PARTITION (date_col='2017-02-07') LOCATION 'hdfs/path/to/location/'