4

最初に、特定の日付から過去 7 日間の日付の文字列を生成したい豚のスクリプトがあります (後でその日のログ ファイルを取得するために使用されます)。次の行でこれを実行しようとしています: %declare CMD7input= ; for i in {1..6}; do d=$(date -d "$DATE -i days" "+%Y-%m-%d"); input="\$input\$d,"; done; echo \$input

次のエラーが表示されます: 「エラー 2999: 予期しない内部エラー。シェル コマンドの実行中にエラーが発生しました: input= ; for i in {1..6}; do d=$(date -d "2012-07-10 -i days"」 +%Y-%m-%d"); input="$input$d,"; done;. コマンドは終了コード 127 で終了しますが
、シェル コマンドは pig の外で完全に正常に実行されます。ここで何がうまくいかないのか本当にわかりません。

ありがとうございました!

4

1 に答える 1

6

私は実用的な解決策を持っていますが、あなたが望むほど合理化されていません。基本的に、Pigに宣言で複雑なシェルステートメントを実行させることができません。

私は最初にシェルスクリプトを書きました (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

次に、次のような豚のスクリプト (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は、変数を表示する目的で、1 行のテキストを含むテキスト ファイルを含むディレクトリであることに注意してください。

次のようにスクリプトを呼び出しました。

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)})
于 2012-08-02T11:01:22.953 に答える