使用
将数据从HDFS加载到Hive时LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;
命令,看起来它正在将hdfs_file移动到hive/warehouse
目录。
是否有可能(如何?)复制它而不是按顺序移动文件,以供另一个进程使用。
答案 0 :(得分:82)
我假设您已经拥有hdfs中的数据。
因此,您不需要LOAD DATA
,这会将文件移动到默认的配置单元位置/user/hive/warehouse
。您可以使用external
关键字定义表,该关键字保留文件,但在hive Metastore中创建表定义。看这里:
Create Table DDL
例如:
create external table table_name (
id int,
myfields string
)
location '/my/location/in/hdfs';
请注意,您使用的格式可能与默认格式不同(如评论中的JigneshRawal所述)。您可以使用自己的分隔符,例如使用Sqoop时:
row format delimited fields terminated by ','
答案 1 :(得分:5)
我发现,当您同时使用EXTERNAL TABLE和LOCATION时,Hive会创建表格,并且最初不会显示任何数据(假设您的数据位置与Hive'LOCATION'不同)。
当您使用'LOAD DATA INPATH'命令时,数据从数据位置MOVED(而不是复制)到您在创建Hive表时指定的位置。
如果在创建Hive表时没有给出位置,它将使用内部Hive仓库位置,数据将从源数据位置移动到内部Hive数据仓库位置(即/user/hive/warehouse/)。
答案 2 :(得分:3)
“负载数据”的替代方案'可用于将数据从现有源位置移动到配置单元数据仓库位置。
你可以使用ALTER TABLE命令和' LOCATION'选项。这是下面所需的命令
ALTER TABLE table_name ADD PARTITION (date_col='2017-02-07') LOCATION 'hdfs/path/to/location/'
这里唯一的条件是,位置应该是目录而不是文件。
希望这能解决问题。