2017-12-07 14 views
0

ユーザーが4種類の値を選択し、関連するデータがUIに表示されるバックエンドにhive dbを持つWebアプリケーションがあります。AND型の論理接続を持つIN句のあるハイブクエリ

例フィールドは次のようになります。

  • プロジェクトID
  • サブポートフォリオ
  • プロジェクトステータス
  • プロジェクト・ファイナンスの状況

ユーザーが言及したフィールドに異なる値を選択することができます(単一または複数)とデータの要求。

私は複数のIN句で1つのハイブクエリを持ち、AND論理演算子と組み合わせてデータを生成します。

ユーザーがフィールドごとに少なくとも1つの値を選択するまで、すべてが良好です。しかし、ユーザーが3つのフィールドのフィルタを選択して空白にすると、 ''はIN句に渡され、whereは条件なしでデータは表示されません。いずれの行も条件に一致しないため。

フィールドが選択されていないかのように、そのフィールドのすべてのデータを取得するか、そのフィールドのIN句を削除するには、IN句に何かを渡す必要があります。

クエリを作成する前に値が選択されているかどうかを毎回確認するには、多くのケースが必要です。

誰もが複数のINを持つ単一のクエリを提案し、いくつかのパラメータを渡して、値が選択されていないフィールドのすべての行を取得できます。

注:ハイブJDBCクエリを使用しています。あなたが好きな構築物で、この問題を扱うことができる

+1

それは、問題が広すぎる。いくつかのサンプルデータと期待される結果とあなたの試みを表示しようとする。 –

答えて

0

:もちろん

where ($subporfolio is null or subportfolio = $subportfolio) and 
     ($status is null or status = $status) and 
     . . . 

in nullは、あなたが値を渡している方法に応じ= ''かもしれません。

+0

あなたの答えゴードンに感謝します。あなたが気にしないなら、ハイブでコンストラクトを使う方法を理解するのを助けてください。例があります。 – techprat

0

ダイナミッククエリを作成した方が良いとわかりました。 すべての入力パラメータをループインし、その値がnullでないか空でないかどうかを確認した後、照会のIN句に追加されます。

関連する問題