Hiveクエリ言語とは? HiveQL Operaトー
⚡ スマートサマリー
Hive Query Language は、すべての HiveQL 式、グループ、グループを駆動する演算子を提供します。ping それらを関係型、算術型、論理型、複合型、コンストラクタの各ファミリーに分類し、これらを合わせて比較、計算、ネストされたデータへのアクセスを網羅する。

Hive クエリ言語 (HiveQL) とは何ですか?
Hive Query Language (HiveQL) は、次のクエリ言語です。 ApacheHive 構造化データの処理と分析に使用されます。MapReduceプログラミングの複雑さからユーザーを解放します。テーブル、行、列、スキーマなど、リレーショナルデータベースの共通概念を再利用することで、学習を容易にします。Hiveは、Hiveクエリ言語(HiveQL)を使用したHiveクエリ作成のためのCLIを提供します。
ほとんどの対話はコマンド ライン インターフェイス (CLI) 経由で行われる傾向があります。 一般に、HiveQL 構文は次のようになります。 SQL ほとんどのデータアナリストが使い慣れている構文です。オリジナルのHiveドキュメントに記載されているファイル形式は、TEXTFILE、SEQUENCEFILE、ORC、RCFILE(Record Columnar File)の4種類です。現在のリリースでは、ParquetとAvroの読み書きも可能で、チューニングに関するガイダンスの多くはORC形式を前提としています。
Hive は、シングルユーザーのメタデータストレージに組み込みの Derby データベースを使用します。マルチユーザーまたは共有メタストアの展開では、Hive は MySQL または、代わりに別の外部リレーショナルデータベースを使用してください。Derbyは一度に1つのセッションしか許可しないためです。
HiveQL 組み込み Operaトー
Hiveは、Hiveデータウェアハウスに格納されているテーブルに対して実行されるデータ操作のための組み込み演算子を提供します。
これらの演算子は、式内のオペランドに対して作用し、比較、計算、ネストされた列へのルックアップなど、適用されたロジックに従って値を返します。
以下は、HiveQLに組み込まれている主な演算子の種類です。
- 関係演算子
- 算術演算子
- 論理演算子
- Opera複雑な型上のtors
- 複合型コンストラクタ
各ファミリーについては、以下の各セクションでそれぞれ詳しく説明しており、各ファミリーの完全な演算子表も掲載しています。
リレーショナル OperaHiveQL の tors
2つのオペランド間の関係を比較するために、関係演算子を使用します。
- Opera等しい、等しくない、より小さい、より大きいなどの演算子。
- これらの演算子におけるオペランドの型はすべてプリミティブ型であり、パターンマッチング演算子は文字列のみを受け入れます。
すべての関係演算子はブール値を返します。そのため、これらの演算子はWHERE句、JOIN条件、CASE WHEN分岐の構成要素となります。次の表は、関係演算子とそのHiveQLでの使用方法の詳細を示しています。
| 内蔵 Operaタ | 詳細説明 | Operand |
|---|---|---|
| X = Y | 式Xが式Yと等しい場合はTRUE、そうでない場合はFALSE。 | すべてのプリミティブ型を受け取ります |
| X != Y | 式Xが式Yと等価でない場合はTRUE。それ以外の場合はFALSE。 | すべてのプリミティブ型を受け取ります |
| X < Y | 式Xが式Yより小さい場合はTRUE、そうでない場合はFALSE。 | すべてのプリミティブ型を受け取ります |
| X <= Y | 式Xが式Y以下の場合、TRUE。それ以外の場合はFALSE。 | すべてのプリミティブ型を受け取ります |
| X > Y | 式Xが式Yより大きい場合はTRUE、そうでない場合はFALSE。 | すべてのプリミティブ型を受け取ります |
| X >= Y | 式Xが式Y以上の場合、TRUE。それ以外の場合はFALSE。 | すべてのプリミティブ型を受け取ります |
| X は NULL です | 式XがNULLと評価される場合はTRUE、それ以外の場合はFALSE。 | すべてのタイプが必要です |
| X は NULL ではありません | 式XがNULLと評価される場合はFALSE、それ以外の場合はTRUE。 | すべてのタイプが必要です |
| X のような Y | 文字列パターンXがYと一致する場合はTRUE、そうでない場合はFALSE。 | 文字列のみを受け取ります |
| X RIKE Y | X または Y が NULL の場合は NULL、X のいずれかの部分文字列が一致する場合は TRUE Java 正規表現の場合は Y、それ以外の場合は FALSE です。 | 文字列のみを受け取ります |
| X 正規表現 Y | RLIKEと同じです。 | 文字列のみを受け取ります |
NULLとの比較では、決してTRUEまたはFALSEが返されないことに注意してください。そのため、表ではX = NULLが機能することを期待するのではなく、IS NULLとIS NOT NULLを別々の演算子として記載しています。
HiveQL 算術演算 Operaトー
算術演算子は、被演算項に対して算術演算を実行するために使用されます。
- 加算、減算などの算術演算tracオペランド間の乗算、除算にはこれらの演算子を使用します。
- これらの演算子におけるオペランドの型はすべて数値型です。
サンプル例:
2 + 3 は 5 になります。
この例では、「+」が演算子、2と3が被演算項、戻り値は5です。
以下の表は、Hiveクエリ言語における算術演算子の詳細を示しています。
| 内蔵 Operaタ | 詳細説明 | Operand |
|---|---|---|
| X+Y | X と Y の値を加算した出力が返されます。 | すべての数値タイプを受け取ります |
| X–Y | これはsubの出力を返しますtracXの値からYの値を取得します。 | すべての数値タイプを受け取ります |
| X * Y | X 値と Y 値を乗算した出力を返します。 | すべての数値タイプを受け取ります |
| X/Y | Y を X から除算した出力を返します。 | すべての数値タイプを受け取ります |
| X%Y | X を Y で割った余りを返します。 | すべての数値タイプを受け取ります |
| X&Y | X と Y のビット単位の AND の出力を返します。 | すべての数値タイプを受け取ります |
| X | よ | X と Y のビット単位の OR の出力を返します。 | すべての数値タイプを受け取ります |
| X^Y | X と Y のビット単位の XOR の出力を返します。 | すべての数値タイプを受け取ります |
| ~X | X のビットごとの NOT の出力を返します。 | すべての数値タイプを受け取ります |
最後の4行は通常の算術演算ではなくビット演算です。整数オペランドのバイナリ表現に対して演算を行うため、&、|、^ は次のセクションで説明する論理AND、OR、NOTとは異なります。
HiveQL 論理 Operaトー
論理演算子は、被演算項に対して論理演算を行うために使用します。
- オペランド間のAND、OR、NOTなどの論理演算には、これらの演算子が使用されます。
- これらの演算子におけるオペランドの型はすべてブール型です。
以下の表は、HiveQLにおける論理演算子の詳細を示しています。
| オペレーター | 詳細説明 | OperaNDS |
|---|---|---|
| XとY | X と Y の両方が TRUE の場合は TRUE、それ以外の場合は FALSE です。 | ブール型のみ |
| X && Y | X AND Y と同じですが、ここでは && 記号を使用します。 | ブール型のみ |
| X または Y | X または Y のいずれか、あるいは両方が TRUE の場合は TRUE、それ以外の場合は FALSE です。 | ブール型のみ |
| X || よ | X OR Y と同じですが、ここでは || 記号を使用します。 | ブール型のみ |
| ×ではありません | X が FALSE の場合は TRUE、それ以外の場合は FALSE です。 | ブール型のみ |
| !X | NOT Xと同じですが、ここでは!記号を使用します。 | ブール型のみ |
関係演算子はブール値を返すため、論理演算子はそれらを組み合わせるものです。例えば、salary > 50000 AND dept = 'Sales' のような述語は、あるファミリーを別のファミリーに連鎖させます。
Opera複合型に関する
関係演算子、算術演算子、論理演算子はすべて単一のスカラー値に対して機能します。Hiveは配列、マップ、構造体の列も格納しますが、これらの要素にアクセスするには別のメカニズムが必要です。次の表は、そのメカニズムを提供する複合型演算子の詳細を示しています。
| オペレーター | OperaNDS | 詳細説明 |
|---|---|---|
| A[n] | A は配列、n は整数型です | これは配列Aのn番目の要素を返します。最初の要素のインデックスは0です。 |
| M[キー] | M は地図ですキーのタイプは K です | これは、マップ内のキーに対応する値を返します。 |
どちらの形式も通常の式なので、SELECT リスト、WHERE 句、または GROUP BY で使用できます。また、構造体フィールドには、括弧の代わりにドット表記 (例: S.field) を使用してアクセスできます。
複合型コンストラクタ
上記の演算子が既存の複雑な列を読み取るのに対し、コンストラクタは新しい複雑な列を作成します。次の表は、Hive の複雑なデータ型 (配列、マップ、構造体) のインスタンスを作成する複合型コンストラクタの詳細を示しています。
このセクションでは、複合型コンストラクタに対して実行される操作について説明します。
| オペレーター | OperaNDS | 詳細説明 |
|---|---|---|
| 配列 | (val1、val2、…) | 指定された要素(val1、val2など)を含む配列が作成されます。 |
| 組合を作成する | (タグ、val1、val2、…) | これは、タグパラメータによって参照される値を持つ共用型を作成します。 |
| 地図 | (キー1、値1、キー2、値2、…) | オペランドで指定されたキーと値のペアを含むマップを作成します。 |
| 名前付き構造体 | (name1、val1、name2、val2、…) | 指定されたフィールド名とオペランドで指定された値を持つ構造体を作成します。 |
| 構造 | (val1、val2、val3、…) | 指定されたフィールド値を持つ構造体を作成します。構造体のフィールド名は、col1、col2などとなります。 |
コンストラクタは、複雑な列にデータを挿入するINSERT文、または複数のスカラー列を1つの構造体にまとめてから結果を別のテーブルに書き込むSELECT文で最もよく使用されます。
HiveQLの組み込み関数
Operaは比較、計算、要素アクセスをカバーしますが、数値の丸め、文字列のトリミング、または置換は行いません。tract は 2 つの日付です。この処理は Hive の組み込み関数に属し、演算子が現れるのと同じ式の中で名前で呼び出されます。以下の表は、初心者が最初に出会う関数のグループを示しています。
| 機能ファミリー | 典型的なメンバー | 何に使われるのか |
|---|---|---|
| 数学 | round()、floor()、ceil()、abs()、pow()、sqrt()、rand() | 単一の列値に対する丸め、べき乗、その他の数値計算。 |
| String | concat()、substr()、upper()、lower()、trim()、length()、regexp_replace() | 清掃、トリミング、再整形ping 比較またはグループ化される前のテキスト。 |
| 日付 | current_date、year()、month()、datediff()、date_add()、unix_timestamp() | Extrac日付の各部分を特定し、2つの日付間の間隔を測定する。 |
| 条件付きの | if()、CASE WHEN、coalesce()、nvl()、isnull() | 行レベルで値を選択し、NULLを代替値に置き換える。 |
| 収集 | size()、map_keys()、map_values()、array_contains()、sort_array() | 複合型演算子によってアクセスされる配列、マップ、構造体の列を検査します。 |
| 型変換 | キャスト()、バイナリ() | 列を演算子が期待する型に強制的に変換する。 |
| 骨材(UDAF) | count()、sum()、avg()、min()、max()、collect_set() | 複数の行を1つの値にまとめる機能で、通常はGROUP BY句と組み合わせて使用されます。 |
関数リストはHiveのリリースによって異なるため、静的なページからではなく、セッション自体から読み込むのが望ましいです。以下の2つのステートメントでそれが可能です。
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
SHOW FUNCTIONS は登録されているすべての名前を一覧表示し、DESCRIBE FUNCTION は 1 行のシグネチャを出力し、EXTENDED 形式は実装クラスが提供する使用例を追加します。組み込み関数が適合しない場合、Hive は ユーザー定義関数 で書かれている Java.
HiveQLとSQL:主な違い
HiveQLは意図的にSQLの構文を借用しており、上記の演算子テーブルはSQLを書いたことがある人なら誰でも見覚えがあるでしょう。しかし、その内部の実行モデルは同じではなく、クエリが単純なSELECT文を超えるとすぐに違いが現れます。
| 行動 | HiveQL | 従来型SQL(RDBMS) |
|---|---|---|
| スキーマ処理 | スキーマオンリード — ファイルがクエリされたときにスキーマが適用されます | 書き込み時のスキーマ — 行が挿入されるときにスキーマが適用されます |
| 行レベルの更新と削除 | ACIDテーブルでのみサポートされています。Hive 3.0以降、管理対象テーブルはデフォルトでACIDです。 | すべてのテーブルでデフォルトでサポートされています |
| インデックス | Hive 3.0 (HIVE-18448) でインデックスのサポートが削除されました。ORC または Parquet ファイルレベルのインデックスとマテリアライズド ビューがそれに代わっています。 | Bツリーやその他のセカンダリインデックスはコア機能です |
| 実行速度とレイテンシー | Tez、MapReduce、またはバッチジョブにコンパイルします。 Sparkそのため、小さな問い合わせでも作業開始コストが発生します。 | 対話型実行(通常はミリ秒単位) |
| 設計目標 | HDFSまたはオブジェクトストア上の非常に大きなファイルの処理能力 | 単一サーバーまたはクラスター上での低遅延の読み書き |
表現力豊かな文章を書く上での実際的な影響は小さいが、確かに存在する。 Opera演算子は期待どおりに動作しますが、リレーショナルデータベースのインデックスから回答される述語は、Hive ではファイルのスキャンによって回答されるため、パーティション列でフィルタリングする方が、演算子自体を調整するよりもはるかに効果的です。
