将数据从HDFS加载到Hive时,使用
LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;
Run Code Online (Sandbox Code Playgroud)
命令,看起来它正在将hdfs_file移动到hive/warehousedir.是否有可能(如何?)复制它而不是按顺序移动它,以便文件被另一个进程使用.
Dag*_*Dag 83
从你的问题我假设你已经在hdfs中有你的数据.因此您不需要LOAD DATA将文件移动到默认的配置单元位置/user/hive/warehouse.您可以使用external关键字定义表,该关键字保留文件,但在hive Metastore中创建表定义.请参阅此处:
创建表DDL
例如:
create external table table_name (
id int,
myfields string
)
location '/my/location/in/hdfs';
Run Code Online (Sandbox Code Playgroud)
请注意,您使用的格式可能与默认格式不同(如评论中的JigneshRawal所述).您可以使用自己的分隔符,例如在使用Sqoop时:
row format delimited fields terminated by ','
Run Code Online (Sandbox Code Playgroud)
我发现,当您同时使用EXTERNAL TABLE和LOCATION时,Hive会创建表格并且最初不会出现任何数据(假设您的数据位置与Hive'LOCATION'不同).
当您使用'LOAD DATA INPATH'命令时,数据从数据位置MOVED(而不是复制)到您在创建Hive表时指定的位置.
如果在创建Hive表时未给出位置,则它将使用内部Hive仓库位置,并且数据将从源数据位置移动到内部Hive数据仓库位置(即/ user/hive/warehouse /).
| 归档时间: |
|
| 查看次数: |
97652 次 |
| 最近记录: |