仅将文件名检索到配置单元中的表中

时间:2016-07-25 19:08:42

标签: hadoop hive

我需要从linux路径中检索filename.txt并将文件名插入到hive中的表列中。 是否可以从路径中检索文件名并使用虚拟列将其插入到hive表中?请指教!

e.g。路径/home/usr/path/filename.txt并将filename插入表中。 create table t(name string);

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你想对HDFS运行 - 命令 - awk -F "/" '{print $NF}'你只需要文件名。

[cloudera@quickstart ~]$ hadoop fs -ls /user/cloudera/departments|awk -F "/" '{print $NF}'|egrep -v 'Found|_SUCCESS'
part-m-00000
part-m-00001
[cloudera@quickstart ~]$ 

如果要对本地文件系统运行,那么 - 命令 - ls -1将为您提供文件名。您也可以使用awk -F "/" '{print $NF}'

您可以创建shell脚本:(取消注释hive语句)

#!/bin/sh

files=`hadoop fs -ls /user/cloudera/departments|awk -F "/" '{print $NF}'|egrep -v 'Found|_SUCCESS'`

for file in $files
 do
   #hive -e "insert into table t(name) values (\"$file\");"
   echo "insert into table t(name) values (\"$file\");"
done

应该在蜂巢表中进行检查:

[cloudera@quickstart ~]$ ./test.sh 
insert into table t(name) values ("part-m-00000");
insert into table t(name) values ("part-m-00001");

答案 1 :(得分:1)

例如,您在变量$ filename中有一个完整的文件名:

 #!/bin/bash
        filename=$(basename "$fullfile")

        #pass variable to the hive script:
        hive -hiveconf filename=$filename -f your_script_name.hql

在剧本中:

        insert into your_table
        select some columns,  '${hiveconf:filename}' as filename  --use variable
        from some table... ;
        or just insert values... 

或者只是简单地做:

hive -e "insert into t values '$filename'"