ハイブのsqlとシェルスクリプトを書いているときに、いくつかの痛い問題に遭遇しました
エラー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
関連
-
[解決済み] のコマンドがzshで見つからない [閉店]。
-
[解決済み] JenkinsでExecute Shellがビルドを失敗とマークする方法/タイミングは?
-
[解決済み] "No such file or directory "と表示されるが、存在する
-
[解決済み] タブを区切り記号として指定するカットコマンド【閉じた状態
-
[解決済み] Centos 6 /usr/sbin/sendmail - 件名を付けてメールを送信する方法は?
-
[解決済み] sed が正規表現で終端がない代用品でエラーになる
-
[解決済み] date: 余分なオペランド %d' エラー
-
文字列 null with space エラー: 二項演算子が期待されています。
-
シェルwhileループのエラー曖昧なリダイレクトとwhileループの変数割り当て失敗問題
-
linux shell script cannot be executed, error syntax error near unexpected token `$'\r'' solution.
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン