我想创建一个脚本来将tsv文件加载到HIVE中。
但是,由于.tsv文件包含 header
所以我首先必须创建一个没有它的临时文件。
在我的script.hql中,我具有以下内容:
DROP TABLE metadata IF EXISTS ;
CREATE TABLE metadata (
id INT,
value STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE ;
! tail -n +2 metadata.tsv > tmp_metadata.tsv ;
LOAD DATA LOCAL 'tmp_metadata.tsv' INTO metadata ;
问题在于,配置单元抱怨应使重定向到新的
>
失败,因此脚本失败。我怎样才能解决这个问题?
最佳答案
1. 创建一个名为script.sh
的新Shell脚本并将其添加到您的Shell脚本中:
#!/bin/sh
tail -n +2 metadata.tsv > tmp_metadata.tsv
hive -v -f ./script.hql
2. 代替您的script.hql
:将此添加到您的
script.hql
中:DROP TABLE IF EXISTS metadata;
CREATE TABLE metadata (
id INT,
value STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE ;
LOAD DATA LOCAL INPATH 'tmp_metadata.tsv' INTO TABLE metadata ;
DROP TABLE metadata IF EXISTS ;
不正确。将其更改为DROP TABLE IF EXISTS metadata;
和LOAD DATA LOCAL 'tmp_metadata.tsv' INTO metadata ;
不正确。将其更改为LOAD DATA LOCAL INPATH 'tmp_metadata.tsv' INTO TABLE metadata ;
3. 现在,更改您的Shell脚本的权限并执行它:sudo chmod 777 script.sh
./script.sh
关于hadoop - 创建使用stdout重定向加载到Hive表中的临时文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29940120/