9

基本的な構文ミスなどのエラーについてHiveQLステートメントを検証するプログラム的な方法はありますか?デバッグ時間を節約するために、ステートメントをElasticMapReduceに送信する前にチェックしたいと思います。

4

3 に答える 3

7

はいあります!

実際にはかなり簡単です。

手順:

1. あなたの言語で Hive thrift クライアントを取得します。

私はルビーなので、このラッパーを使用します - https://github.com/forward/rbhive (gem install rbhive)

Ruby を使用していない場合は、Hive ソースをダウンロードし、含まれている thrift 構成ファイルで thrift を実行して、ほとんどの言語でクライアント コードを生成できます。

2. ポート 10001 でハイブに接続し、describe クエリを実行します。

ルビーでは、これは次のようになります。

RBHive.connect(host, port) do |connection|
    connection.fetch("describe select * from categories limit 10")
end

クエリが無効な場合、クライアントは例外をスローし、構文が無効な理由の詳細を示します。構文が有効な場合、Describe はクエリ ツリーを返します (この場合は無視できます)。

それが役立つことを願っています。

于 2011-11-17T23:36:33.303 に答える
6

「カテゴリ制限10からselect*を説明する」はうまくいきませんでした。

たぶん、これは使用しているHiveバージョンに関連しています。私はHive0.8.1.4を使用しています

いくつかの調査を行った後、私はMatthewRathboneが提供したものと同様の解決策を見つけました。

Hiveは、クエリの実行プランを表示するEXPLAINコマンドを提供します。このステートメントの構文は次のとおりです。

EXPLAIN[EXTENDED]クエリ

したがって、rbhiveも使用しているすべての人にとって:

RBHive.connect(host, port) do |c|
    c.execute("explain select * from categories limit 10")
end

Explainは成功した場合に結果を返さないため、c.fetchをc.executeに置き換える必要があることに注意してください=> rbhiveは、構文が正しいかどうかに関係なく例外をスローします。

構文エラーが発生した場合、またはクエリしているテーブル/列が存在しない場合、executeは例外をスローします。すべてが正常であれば、例外はスローされませんが、結果は表示されません。これは悪いことではありません。

于 2012-11-29T17:00:01.753 に答える
0

最新バージョンの hive 2.0 には hplsql ツールが付属しており、実際に実行しなくても hive コマンドを検証できます。

構成: 以下の XML を hive/conf フォルダーに追加し、ハイブを再起動します。

https://github.com/apache/hive/blob/master/hplsql/src/main/resources/hplsql-site.xml

hplsql を実行してクエリを検証するには、次のコマンドを使用してください。

hplsql -offline -trace -e 'select * from sample'

(または) ファイル全体を検証するには

hplsql -offline -trace -f samplehql.sql

クエリ構文が正しい場合、hplsql からの応答は次のようになります。

Ln:1 SELECT // type
Ln:1 select * from sample // command
Ln:1 Not executed - offline mode set // execution status

クエリの構文が間違っている場合、クエリの構文の問題が報告されます

Hive のバージョンが古い場合は、hplsql jar を hive/lib 内に手動で配置して続行する必要があります。

于 2016-08-03T10:05:13.553 に答える