如何合并两个文本文件并创建另一个文本文件并通过Shell脚本加载到HIVE中?

时间:2018-10-04 11:40:45

标签: shell hive

我在服务器上有一个位置,这里有2个txt格式的文件。我们需要自动化以下条件的过程: 1)任一文件都可用于加载到HIVE表中。 2)两个文件也都可以加载。但是在这种情况下,我们需要将两个文件合并为一个文件,然后加载到HIVE表中。

根据要求,以下是我提供的代码。但这不起作用:

    #!/bin/bash
    cd <path_to/source_files/>
    file1="file1.txt"
    file2="file2.txt"
    #file3=$file1 + $file2


    if [$file1 and $file2 ]
    then
cd <path_to>/source_files/
            echo "Loading both the files"
cat file* > merge.txt
    hive << EOF
    use sprint1;
    TRUNCATE TABLE sprint1.SET;
    LOAD DATA LOCAL INPATH '<path_to>/source_files/merge.txt' INTO TABLE SET;
    INSERT INTO TABLE hist_SET select * from SET;
    EOF
    rm -rf ltd_al_merge.txt
    fi

    if [ -f "$file1" ]
    then
            echo "$file1 existing in source."
    hive << EOF
    use sprint1;
    TRUNCATE TABLE sprint1.SET;
    LOAD DATA LOCAL INPATH '<path_to>/source_files/file1.txt' INTO TABLE SET;
    INSERT INTO TABLE hist_SET select * from SET;
    EOF

    else
            echo "$file1 NOT EXISTS in the source"
    fi

    if  [ -f "$file2" ]
    then
     echo "$file2 existing in source "
    hive << EOF
    use sprint1;
    TRUNCATE TABLE sprint1.SET;
    LOAD DATA LOCAL INPATH '<path_to>/source_files/file2.txt' INTO TABLE SET;
    INSERT INTO TABLE hist_SET select * from SET;

执行代码时无法理解第一个“ if”。请让我知道我的错误。

谢谢

1 个答案:

答案 0 :(得分:0)

要检查文件是否存在,您必须像下面这样使用

if [[ -f $file1  && -f $file2 ]]
then
echo "file1 - exists"
echo "file2 - exists"
fi

请注意“ [[”和“]]”周围的空格。它们是exe文件,所以应该用空格包围。