我需要从linux路径中检索filename.txt并将文件名插入到hive中的表列中。 是否可以从路径中检索文件名并使用虚拟列将其插入到hive表中?请指教!
e.g。路径/home/usr/path/filename.txt并将filename插入表中。 create table t(name string);
谢谢!
答案 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'"