在pig脚本中执行shell命令时出错

xytpbqjk  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(328)

我有一个pig脚本,一开始我想从某个日期生成过去7天的日期字符串(稍后用于检索这些天的日志文件)。我尝试使用以下行执行此操作:%7 input= ; for i in {1..6}; do d=$(date -d "$DATE -i days" "+%Y-%m-%d"); input="\$input\$d,"; done; echo \$input 我得到一个错误:“错误2999:意外的内部错误。执行shell命令时出错:input=;对于{1..6}中的i;do d=$(日期-d“2012-07-10-i天”“+%y-%m-%d”);input=“$input$d,”;完成;。命令退出,退出代码127“
不过,shell命令在pig之外运行得非常好。我真的不确定这里出了什么问题。
谢谢您!

ne5o7dgx

ne5o7dgx1#

我有一个可行的解决方案,但没有你想要的那么精简,基本上我没有让pig在declare中执行复杂的shell语句。
我首先编写了一个shell脚本(我们称之为6-days-back-from.sh):


# !/bin/bash

DATE=$1
for i in {1..6}; do d=$( date -d "$DATE -$i days" +%F ) ; echo -n "$d "; done

然后一个Pig脚本如下(我们称之为days.pig):

%declare my_date `./6-days-back-from.sh $DATE`
A = LOAD 'dual' USING PigStorage();
B = FOREACH A GENERATE '$my_date';
DUMP B

注意,dual是一个目录,其中包含一个文本文件和一行文本,用于显示变量
我把剧本称为:

pig -x local -param DATE="2012-08-03" days.pig

并得到以下输出:

({(2012-08-02),(2012-08-01),(2012-07-31),(2012-07-30),(2012-07-29),(2012-07-28)})

相关问题