1. ホーム
  2. シェル

ハイブのsqlとシェルスクリプトを書いているときに、いくつかの痛い問題に遭遇しました

2022-02-12 02:57:37

エラー1

Hive の where の後にフィールドのエイリアスを続けることはできません。

エラー2

hiveのgroupbyで独自に定義した関数を使用しないとエラーになる(ネストしたselectに置き換える)。

エラー3

実行中: $ . /hive_game_operationstatis5.sh を実行すると、次のようなエラーメッセージが表示されます。

. /hive_game_operationstatis5.sh:line 11: [: missing `]'
. /hive_game_operationstatis5.sh:line 17: /tmp/statis_activitysourcestatis20141014/statis_activitysourcestatis120141014.txt:No such file or directory
. /hive_game_operationstatis5.sh:line 36:/tmp/statis_activitysourcestatis20141014/statis_activitysourcestatis220141014.txt:No such file or directory
ERROR 2 (HY000) atline 1: File'/tmp/statis_activitysourcestatis20141014/statis_activitysourcestatis120141014.txt'not found (Errcode: 2)
ERROR 2 (HY000) atline 1: File '/tmp/statis_activitysourcestatis20141014/statis_activitysourcestatis220141014.txt' not found (Errcode: 2)

エラー解析です。

11行目のcreate folderのコードがうまくいかなかったため、後でファイルパスが見つからないというエラーが続出したのです。

エラーが報告されたときのコードです。

if [ ! -d $output]
then
        mkdir -p $output
fi<span style="font-family: Arial, Helvetica, sans-serif;"> </span>

コードを変更しました。

if [ ! -d $output]
then
        mkdir -p $output
fi

違いがわかりますか?出力と]の間にはスペースがあるはずです。

.

エラー4 日付が認識されない

実行中。/hive_game_operationstatis6.sh スクリプトを実行しています。エラーは、例えば以下のように報告されます。

. /hive_game_operationstatis6.sh:line 12: [: /tmp/statis_suspendedwindowstatisdate: binary operator expected
. /hive_game_operationstatis6.sh:line 21: $output/$file_name1: ambiguous redirect
. /hive_game_operationstatis6.sh:line 39: $output/$file_name2: ambiguous redirect
. /hive_game_operationstatis6.sh:line 56: $output/$file_name3: ambiguous redirect
. /hive_game_operationstatis6.sh:line 73: $output/$file_name4: ambiguous redirect
. /hive_game_operationstatis6.sh:line 90: $output/$file_name5: ambiguous redirect
 

分析する。

シェルスクリプトでは、こう書いています。

output='/tmp/statis_suspendedwindowstatis'$date
file_name1='statis_suspendedwindowstatis1'$date'.txt'

エラー表示は、呼び出し時の "ファジーリダイレクト" です!

エラーメッセージだけではわからない。でエラーコードを直接ご覧ください。

変更前のコードです。

date='日付 +%Y%m%d'

このバグを変更した後のコード。

date=`日付 +%Y%m%d` です。

どこにエラーがあるかわかりますか?ははは、はい、情けないですねー。

シェルはキーボードの1の前にある'アポストロフィ'を使わなければなりません、ダブルクォートの'アポストロフィ'ではだめです。

.

変数の後に文字列が続くと仮定して、キャリッジリターンの左側にある「アポストロフィ」で十分です。

初めてシェルを使う私にとっては 頭痛の種です!

同じような失敗をしないようにしたいですね。


取得元:https://www.cnblogs.com/mengfanrong/p/5097813.html