配置单元表存储源文件的元数据:
Hive_Table: SRC_Meta
Col_Table_Name Col_SRCFILENAME_Name col_Header_Names
Table1 FileName1 col1 string, col2 bigint........
Table2 FileName2
...
.
.
.
.
Table100 FileName100
unix文件位置:文件被放在这里,并不是所有100个源文件都可以随时使用。假设我收到了100多个文件中的5到6个
Source files.
/tmp/Filename1.txt
/tmp/FileName13.txt
/tmp/FileName19.txt
/tmp/Filename81.txt
/tmp/FileName94.txt
使用配置单元中的元数据表,提取srcfilenamenames并将其保存到变量中,然后使用usinf for循环将其传递到文件检查器(如果可用)打印为可用(如果不可用)
SRCFILE=($(hive -S -e "SELECT DISTINCT LTRIM(RTRIM(Col_SRCFILENAME_Name))
FROM SRC_Meta))
for SRCFILENAME in "${SRCFILE[@]}"
do
echo "SRCFILENAME NAME IS $SRCFILENAME"
if ls ${SRCFILENAME}*.txt 1> /dev/null 2>&1; then
mv -f ${SRCFILENAME}*.txt /tmp/archive/
echo "***************File is available and moved to the Script source dir*********"
else
echo "${SRCFILENAME} not found in the Source directory"
echo
echo
fi
done
问题1:但是我必须处理不区分大小写的问题,在从配置单元搜索时,在unix文件夹中查找不区分大小写的文件名,并尝试使用这个文件
if ls `ls | grep -i ${SRCFILENAME}*.txt` 1> /dev/null 2>&1; then
在取出文件时,上面的一个没有按预期工作
问题2:将文件移出归档文件夹后,我必须使用srcfilename变量创建表,但我必须再次从配置单元表中获取表名,并且必须执行for循环。
在这个场景中,再次使用srcfilename逐个传递100+个表是很费时的,相反,有没有办法绕过并最小化可用的srcfilename,而只传递可用的srcfilename作为变量来获取其余的元信息以创建配置单元表?假设还有其他文件在里面 /tmp/archive/
文件夹
暂无答案!
目前还没有任何答案,快来回答吧!