我想创建一个脚本来将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/

10-12 23:46