hive-e「show tables」プロンプトcannot recognize input near'show''<br>' '<br>' in ddl statement

1534 ワード

一、前言


プロジェクトの必要性は、hiveのサポートする最大同時ユーザ数が需要を満たすかどうかを知る必要があるため、javaがコマンドラインプログラムを呼び出す方法で行う小さなプログラムテストを書いた.
次のようになります.
 Process executor = Runtime.getRuntime().exec(command,env);

しかし、コマンドラインにhive-e「show tables」を入力すると、以下に示すようにすべて正常になるという問題に直面しています.
[niy@niy-computer /]$ hive -e "show tables"

Logging initialized using configuration in file:/home/niy/workspace1/hive/trunk/conf/hive-log4j.properties
Hive history file=/tmp/niy/hive_job_log_niy_201305201234_366682237.txt
OK
alter2
niytab
part_nowhitelist_test
part_whitelist_test
poke
poke1
poke3
raw
src_rc_concatenate_test
table1
table3
test_table
test_table_like
xx
Time taken: 6.217 seconds, Fetched: 14 row(s)
javaプログラムでコマンドラインを呼び出す方式上のcommandのパラメータがhive-e「show tables」である場合、実行に失敗し、ヒントを与える
 

二ソリューション


ヒントcannot recognize input near'show''''in ddl statement、すなわちshow以降の文「tables」の読み取りに成功しなかったことを通知し、「show databases」に置き換えるとエラーが依然として発生していることがわかります.
デバッグ検出プログラムが実行されています.
Process executor = Runtime.getRuntime().exec(command,env);

commandの値はhive-e「show tables」であり,hiveに渡す場合は正確であり,解析エラーはhive自体の問題であると断定できる.
時間が限られているため,解決策を暫定的に与え,hive−fを用いてこの問題を回避したが,この問題の正面解決策は後で処理する時間があり,初歩的な感覚はhiveのバグである可能性がある.
まずhive ql文をファイル/home/niy/tmpに書き込む.ql(.ql接尾辞)
hive-v-f/home/niy/tmpを採用する.ql
片付ける.

三まとめ


問題の解決は時には兵が遮るのではなく、水が土を埋めて正面から応えるのではなく、迂回戦術を採用することもできる.