Hive-quick-guide
ハイブ-はじめに
「ビッグデータ」という用語は、膨大な量、高速、および日々増加しているさまざまなデータを含む大規模なデータセットのコレクションに使用されます。 従来のデータ管理システムを使用して、ビッグデータを処理することは困難です。 そのため、Apache Software Foundationは、Hadoopと呼ばれるフレームワークを導入して、ビッグデータの管理と処理の課題を解決しました。
Hadoop
Hadoopは、分散環境でビッグデータを保存および処理するためのオープンソースフレームワークです。 これには2つのモジュールが含まれ、1つはMapReduce、もう1つはHadoop分散ファイルシステム(HDFS)です。
- * MapReduce:*これは、コモディティハードウェアの大きなクラスターで大量の構造化、半構造化、および非構造化データを処理するための並列プログラミングモデルです。
- HDFS: Hadoop分散ファイルシステムは、データセットの保存と処理に使用されるHadoopフレームワークの一部です。 汎用ハードウェアで実行するフォールトトレラントファイルシステムを提供します。
Hadoopエコシステムには、Hadoopモジュールを支援するために使用されるSqoop、Pig、Hiveなどのさまざまなサブプロジェクト(ツール)が含まれています。
- * Sqoop:* HDFSとRDBMSの間でデータをインポートおよびエクスポートするために使用されます。
- * Pig:* MapReduce操作用のスクリプトの開発に使用される手続き型言語プラットフォームです。
- ハイブ: MapReduce操作を行うためのSQLタイプスクリプトの開発に使用されるプラットフォームです。
注意: MapReduce操作を実行するには、さまざまな方法があります。
- 構造化、半構造化、および非構造化データにJava MapReduceプログラムを使用する従来のアプローチ。
- Pigを使用して構造化および半構造化データを処理するMapReduceのスクリプトアプローチ。
- Hiveを使用して構造化データを処理するMapReduceのHiveクエリ言語(HiveQLまたはHQL)。
ハイブとは
Hiveは、Hadoopで構造化データを処理するためのデータウェアハウスインフラストラクチャツールです。 ビッグデータを要約するためにHadoopの上に常駐し、クエリと分析を簡単にします。
当初、HiveはFacebookによって開発されましたが、後にApache Software Foundationが取り上げて、Apache Hiveという名前でオープンソースとしてさらに開発しました。 さまざまな企業で使用されています。 たとえば、AmazonはAmazon Elastic MapReduceでそれを使用します。
ハイブは違います
- リレーショナルデータベース
- オンライントランザクション処理(OLTP)の設計
- リアルタイムのクエリと行レベルの更新のための言語
Hiveの機能
- スキーマをデータベースに保存し、処理したデータをHDFSに保存します。
- OLAP用に設計されています。
- HiveQLまたはHQLと呼ばれるクエリ用のSQL型言語を提供します。 *親しみやすく、高速で、スケーラブルで、拡張可能です。
Hiveのアーキテクチャ
次のコンポーネント図は、Hiveのアーキテクチャを示しています。
このコンポーネント図には、さまざまなユニットが含まれています。 次の表は、各ユニットについて説明しています。
Unit Name | Operation |
---|---|
User Interface | Hive is a data warehouse infrastructure software that can create interaction between user and HDFS. The user interfaces that Hive supports are Hive Web UI, Hive command line, and Hive HD Insight (In Windows server). |
Meta Store | Hive chooses respective database servers to store the schema or Metadata of tables, databases, columns in a table, their data types, and HDFS mapping. |
HiveQL Process Engine | HiveQL is similar to SQL for querying on schema info on the Metastore. It is one of the replacements of traditional approach for MapReduce program. Instead of writing MapReduce program in Java, we can write a query for MapReduce job and process it. |
Execution Engine | The conjunction part of HiveQL process Engine and MapReduce is Hive Execution Engine. Execution engine processes the query and generates results as same as MapReduce results. It uses the flavor of MapReduce. |
HDFS or HBASE | Hadoop distributed file system or HBASE are the data storage techniques to store data into file system. |
ハイブの働き
次の図は、HiveとHadoopの間のワークフローを示しています。
次の表は、HiveがHadoopフレームワークと対話する方法を定義しています。
Step No. | Operation |
---|---|
1 |
コマンドラインやWeb UIなどのHiveインターフェイスは、クエリをJDBCドライバやJDBCなどのデータベースドライバに送信して実行します。 |
2 |
Get Plan ドライバーは、クエリを解析して、構文とクエリプラン、またはクエリの要件をチェックするクエリコンパイラの助けを借ります。 |
3 |
Get Metadata コンパイラはメタデータ要求をメタストア(任意のデータベース)に送信します。 |
4 |
Send Metadata メタストアは、コンパイラへの応答としてメタデータを送信します。 |
5 |
Send Plan コンパイラーは要件を確認し、ドライバーに計画を再送信します。 ここまでで、クエリの解析とコンパイルが完了しました。 |
6 |
Execute Plan ドライバーは、実行プランを実行エンジンに送信します。 |
7 |
Execute Job 内部的に、実行ジョブのプロセスはMapReduceジョブです。 実行エンジンは、ジョブをNameノードにあるJobTrackerに送信し、このジョブをDataノードにあるTaskTrackerに割り当てます。 ここで、クエリはMapReduceジョブを実行します。 |
7.1 |
Metadata Ops 一方、実行中、実行エンジンはMetastoreでメタデータ操作を実行できます。 |
8 |
Fetch Result 実行エンジンは、データノードから結果を受け取ります。 |
9 |
Send Results 実行エンジンは、これらの結果の値をドライバーに送信します。 |
10 |
Send Results ドライバーは結果をHive Interfacesに送信します。 |
Hive-インストール
Hive、Pig、HBaseなどのすべてのHadoopサブプロジェクトは、Linuxオペレーティングシステムをサポートしています。 したがって、LinuxフレーバーOSをインストールする必要があります。 Hiveのインストールでは、次の簡単な手順が実行されます。
ステップ1:JAVAインストールの確認
Hiveをインストールする前に、Javaをシステムにインストールする必要があります。 次のコマンドを使用して、Javaのインストールを確認しましょう。
Javaがすでにシステムにインストールされている場合、次の応答が表示されます。
システムにjavaがインストールされていない場合は、javaをインストールするための以下の手順に従ってください。
Javaのインストール
ステップI:
次のリンクhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260l[][[1]] <最新バージョン>-X64.tar.gz)をダウンロードします。 .oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260l。
次に、jdk-7u71-linux-x64.tar.gzがシステムにダウンロードされます。
ステップII:
通常、ダウンロードしたjavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用してjdk-7u71-linux-x64.gzファイルを抽出します。
ステップIII:
すべてのユーザーがJavaを使用できるようにするには、「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。
ステップIV:
PATHおよびJAVA_HOME変数を設定するには、次のコマンドを〜/.bashrcファイルに追加します。
すべての変更を現在実行中のシステムに適用します。
ステップV:
次のコマンドを使用して、Javaの代替を構成します。
上記で説明したように、ターミナルからコマンドjava -versionを使用してインストールを検証します。
ステップ2:Hadoopインストールの検証
Hiveをインストールする前に、Hadoopをシステムにインストールする必要があります。 次のコマンドを使用して、Hadoopのインストールを確認しましょう。
Hadoopがシステムにすでにインストールされている場合、次の応答が返されます。
Hadoopがシステムにインストールされていない場合は、次の手順に進みます。
Hadoopをダウンロードする
次のコマンドを使用して、Apache Software FoundationからHadoop 2.4.1をダウンロードして抽出します。
擬似分散モードでのHadoopのインストール
以下の手順を使用して、Hadoop 2.4.1を擬似分散モードでインストールします。
ステップI:Hadoopのセットアップ
次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。
すべての変更を現在実行中のシステムに適用します。
ステップII:Hadoopの構成
すべてのHadoop設定ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルに適切な変更を加える必要があります。
javaを使用してHadoopプログラムを開発するには、 JAVA_HOME 値をシステム内のjavaの場所に置き換えて、 hadoop-env.sh ファイルのjava環境変数をリセットする必要があります。
以下に、Hadoopを構成するために編集する必要があるファイルのリストを示します。
core-site.xmlを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
次のデータを想定します。
このファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
- 注意:*上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。
このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、mapred-site、xml.templateからmapred-site.xmlファイルにファイルをコピーする必要があります。
Hadoopインストールの検証
次の手順を使用して、Hadoopのインストールを確認します。
ステップI:ノードのセットアップに名前を付ける
次のようにコマンド「hdfs namenode -format」を使用して、namenodeをセットアップします。
期待される結果は次のとおりです。
ステップII:Hadoop dfの検証
次のコマンドは、dfsを開始するために使用されます。 このコマンドを実行すると、Hadoopファイルシステムが起動します。
予想される出力は次のとおりです。
ステップIII:糸スクリプトの検証
次のコマンドを使用して、糸スクリプトを開始します。 このコマンドを実行すると、糸デーモンが起動します。
予想される出力は次のとおりです。
ステップIV:ブラウザーでHadoopにアクセスする
Hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。
ステップV:クラスターのすべてのアプリケーションを確認する
クラスターのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。 このサービスにアクセスするには、次のURLを使用してください。
ステップ3:Hiveをダウンロードする
このチュートリアルでは、hive-0.14.0を使用します。 次のリンクhttp://apache.petsads.us/hive/hive-0.14.0/[[[2]]]にアクセスしてダウンロードできます。/Downloadsディレクトリにダウンロードされると仮定します。 ここでは、このチュートリアル用に「apache-hive-0.14.0-bin.tar.gz」という名前のHiveアーカイブをダウンロードします。 次のコマンドを使用して、ダウンロードを確認します。
ダウンロードが成功すると、次の応答が表示されます。
ステップ4:Hiveのインストール
システムにHiveをインストールするには、次の手順が必要です。 Hiveアーカイブが/Downloadsディレクトリにダウンロードされると仮定します。
Hive Archiveの抽出と検証
次のコマンドを使用して、ダウンロードを確認し、ハイブアーカイブを抽出します。
ダウンロードが成功すると、次の応答が表示されます。
====/usr/local/hiveディレクトリへのファイルのコピー
スーパーユーザー「su-」からファイルをコピーする必要があります。 次のコマンドを使用して、抽出したディレクトリから/usr/local/hive”ディレクトリにファイルをコピーします。
Hiveの環境をセットアップする
- 〜/.bashrc *ファイルに次の行を追加することにより、Hive環境をセットアップできます。
〜/.bashrcファイルを実行するには、次のコマンドを使用します。
ステップ5:Hiveの構成
HadoopでHiveを構成するには、 $ HIVE_HOME/conf ディレクトリにある hive-env.sh ファイルを編集する必要があります。 次のコマンドは、Hive config フォルダーにリダイレクトし、テンプレートファイルをコピーします。
次の行を追加して、 hive-env.sh ファイルを編集します。
Hiveのインストールは正常に完了しました。 メタストアを構成するには、外部データベースサーバーが必要になりました。 Apache Derbyデータベースを使用します。
ステップ6:Apache Derbyのダウンロードとインストール
以下の手順に従って、Apache Derbyをダウンロードしてインストールします。
Apache Derbyのダウンロード
Apache Derbyをダウンロードするには、次のコマンドを使用します。 ダウンロードには時間がかかります。
次のコマンドを使用して、ダウンロードを確認します。
ダウンロードが成功すると、次の応答が表示されます。
Derbyアーカイブの抽出と検証
以下のコマンドは、Derbyアーカイブの抽出と検証に使用されます。
ダウンロードが成功すると、次の応答が表示されます。
ファイルを/usr/local/derbyディレクトリにコピーする
スーパーユーザー「su-」からコピーする必要があります。 次のコマンドを使用して、抽出したディレクトリから/usr/local/derbyディレクトリにファイルをコピーします。
Derbyの環境をセットアップする
- 〜/.bashrc *ファイルに次の行を追加することにより、Derby環境をセットアップできます。
- 〜/.bashrc *ファイルを実行するには、次のコマンドを使用します。
メタストアを保存するディレクトリを作成します
$ DERBY_HOMEディレクトリにdataという名前のディレクトリを作成して、メタストアデータを保存します。
これで、Derbyのインストールと環境設定が完了しました。
ステップ7:Hiveのメタストアの構成
メタストアの構成とは、データベースの保存場所をHiveに指定することを意味します。 これを行うには、$ HIVE_HOME/confディレクトリにあるhive-site.xmlファイルを編集します。 まず、次のコマンドを使用してテンプレートファイルをコピーします。
jpox.propertiesという名前のファイルを作成し、次の行を追加します。
ステップ8:Hiveインストールの検証
Hiveを実行する前に、HDFSに /tmp フォルダーと別のHiveフォルダーを作成する必要があります。 ここでは、 /user/hive/warehouse フォルダーを使用します。 以下に示すように、これらの新しく作成されたフォルダーに書き込み許可を設定する必要があります。
Hiveを検証する前に、HDFSでそれらを設定します。 次のコマンドを使用します。
Hiveのインストールを確認するには、次のコマンドを使用します。
Hiveが正常にインストールされると、次の応答が表示されます。
次のサンプルコマンドを実行して、すべてのテーブルを表示します。
Hive-データ型
この章では、テーブル作成に関係するHiveのさまざまなデータ型について説明します。 Hiveのすべてのデータタイプは、次の4つのタイプに分類されます。
- 列タイプ
- リテラル
- ヌル値 *複合型
列タイプ
列タイプは、Hiveの列データタイプとして使用されます。 それらは以下のとおりです。
積分型
整数型データは、整数データ型INTを使用して指定できます。 データ範囲がINTの範囲を超える場合、BIGINTを使用する必要があり、データ範囲がINTより小さい場合、SMALLINTを使用します。 TINYINTはSMALLINTよりも小さいです。
次の表は、さまざまなINTデータ型を示しています。
Type | Postfix | Example |
---|---|---|
TINYINT | Y | 10Y |
SMALLINT | S | 10S |
INT | - | 10 |
BIGINT | L | 10L |
文字列型
文字列型のデータ型は、単一引用符( )または二重引用符( "")を使用して指定できます。 VARCHARとCHARの2つのデータ型が含まれています。 HiveはCタイプのエスケープ文字に従います。
次の表は、さまざまなCHARデータ型を示しています。
Data Type | Length |
---|---|
VARCHAR | 1 to 65355 |
CHAR | 255 |
タイムスタンプ
オプションのナノ秒精度の従来のUNIXタイムスタンプをサポートします。 java.sql.Timestamp形式「YYYY-MM-DD HH:MM:SS.fffffffff」および形式「yyyy-mm-dd hh:mm:ss.ffffffffff」をサポートしています。
日付
DATE値は、年/月/日の形式で\ {\ {YYYY-MM-DD}}の形式で記述されます。
小数
HiveのDECIMAL型は、JavaのBig Decimal形式と同じです。 不変の任意精度を表すために使用されます。 構文と例は次のとおりです。
ユニオンの種類
Unionは、異種データ型のコレクションです。* create union *を使用してインスタンスを作成できます。 構文と例は次のとおりです。
リテラル
Hiveでは次のリテラルが使用されます。
浮動小数点型
浮動小数点型は、小数点付きの数字にすぎません。 一般に、このタイプのデータはDOUBLEデータタイプで構成されます。
小数タイプ
^ -308308 ^
ヌル値
欠損値は、特別な値NULLで表されます。
複合型
Hiveの複合データ型は次のとおりです。
配列
Hiveの配列は、Javaで使用されるのと同じ方法で使用されます。
Maps
HiveのマップはJavaマップに似ています。
構造体
Hiveの構造は、コメント付きの複雑なデータの使用に似ています。
Hive-データベースの作成
Hiveは、データベースとテーブルを定義して構造化データを分析できるデータベーステクノロジーです。 構造化データ分析のテーマは、データを表形式で保存し、クエリを渡して分析することです。 この章では、Hiveデータベースの作成方法について説明します。 Hiveには、 default という名前のデフォルトデータベースが含まれています。
データベースステートメントの作成
Create Databaseは、Hiveでデータベースを作成するために使用されるステートメントです。 Hiveのデータベースは、*名前空間*またはテーブルのコレクションです。 このステートメントの*構文*は次のとおりです。
ここで、IF NOT EXISTSはオプションの句であり、同じ名前のデータベースがすでに存在することをユーザーに通知します。 このコマンドでは、DATABASEの代わりにSCHEMAを使用できます。 次のクエリを実行して、 userdb という名前のデータベースを作成します。
or
データベースリストを確認するには、次のクエリを使用します。
JDBCプログラム
データベースを作成するJDBCプログラムを以下に示します。
HiveCreateDb.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
Hive-データベースの削除
この章では、Hiveでデータベースを削除する方法について説明します。 SCHEMAとDATABASEの使用法は同じです。
データベース文の削除
データベースの削除は、すべてのテーブルを削除し、データベースを削除するステートメントです。 その構文は次のとおりです。
データベースを削除するには、次のクエリを使用します。 データベース名が userdb であると仮定しましょう。
次のクエリは、 CASCADE を使用してデータベースを削除します。 データベースを削除する前にそれぞれのテーブルを削除することを意味します。
次のクエリは、 SCHEMA を使用してデータベースを削除します。
この句はHive 0.6で追加されました。
JDBCプログラム
データベースを削除するJDBCプログラムを以下に示します。
HiveDropDb.javaという名前のファイルにプログラムを保存します。 以下に、このプログラムをコンパイルして実行するコマンドを示します。
出力:
ハイブ-テーブルの作成
この章では、テーブルの作成方法とデータの挿入方法について説明します。 HIVEでテーブルを作成する規則は、SQLを使用してテーブルを作成することに非常に似ています。
テーブルステートメントの作成
Create Tableは、Hiveでテーブルを作成するために使用されるステートメントです。 構文と例は次のとおりです。
構文
例
Sr.No | Field Name | Data Type |
---|---|---|
1 | Eid | int |
2 | Name | String |
3 | Salary | Float |
4 | Designation | string |
以下のデータは、コメント、フィールドターミネーター、行ターミネーター、保存ファイルタイプなどの行形式のフィールドです。
次のクエリは、上記のデータを使用して employee という名前のテーブルを作成します。
IF NOT EXISTSオプションを追加すると、テーブルが既に存在する場合、Hiveはステートメントを無視します。
テーブルが正常に作成されると、次の応答が表示されます。
JDBCプログラム
テーブルを作成するJDBCプログラムの例を示します。
HiveCreateDb.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力
データの読み込みステートメント
一般に、SQLでテーブルを作成した後、Insertステートメントを使用してデータを挿入できます。 しかし、Hiveでは、LOAD DATAステートメントを使用してデータを挿入できます。
Hiveにデータを挿入する際、LOAD DATAを使用してバルクレコードを保存することをお勧めします。 データをロードするには2つの方法があります。1つはローカルファイルシステムから、もう1つはHadoopファイルシステムからです。
構文
ロードデータの構文は次のとおりです。
- LOCALは、ローカルパスを指定する識別子です。 オプションです。
- OVERWRITEは、テーブル内のデータを上書きするためのオプションです。
- PARTITIONはオプションです。
例
次のデータをテーブルに挿入します。 これは、 /home/user ディレクトリにある sample.txt という名前のテキストファイルです。
次のクエリは、指定されたテキストをテーブルにロードします。
ダウンロードが成功すると、次の応答が表示されます。
JDBCプログラム
以下に、指定されたデータをテーブルにロードするJDBCプログラムを示します。
HiveLoadData.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
ハイブ-テーブルの変更
この章では、テーブル名の変更、列名の変更、列の追加、列の削除または置換など、表の属性を変更する方法について説明します。
テーブルの変更ステートメント
Hiveのテーブルを変更するために使用されます。
構文
このステートメントは、テーブル内で変更する属性に基づいて、次の構文のいずれかを使用します。
名前を変更…ステートメント
次のクエリは、テーブルの名前を employee から emp に変更します。
JDBCプログラム
テーブルの名前を変更するJDBCプログラムは次のとおりです。
HiveAlterRenameTo.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
変更ステートメント
次の表には、 employee テーブルのフィールドが含まれており、変更するフィールドを太字で示しています。
Field Name | Convert from Data Type | Change Field Name | Convert to Data Type |
---|---|---|---|
eid | int | eid | int |
name | String | ename | String |
salary | Float | salary | Double |
designation | String | designation | String |
次のクエリは、上記のデータを使用して列名と列データ型の名前を変更します。
JDBCプログラム
以下に、列を変更するJDBCプログラムを示します。
HiveAlterChangeColumn.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
列ステートメントの追加
次のクエリは、従業員テーブルにdeptという名前の列を追加します。
JDBCプログラム
テーブルに列を追加するJDBCプログラムを以下に示します。
HiveAlterAddColumn.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
置換ステートメント
次のクエリは、 employee テーブルからすべての列を削除し、 emp および name 列に置き換えます。
JDBCプログラム
以下に示すのは、 eid 列を empid に、 ename 列を name に置き換えるJDBCプログラムです。
HiveAlterReplaceColumn.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
ハイブ-ドロップテーブル
この章では、Hiveでテーブルを削除する方法について説明します。 Hive Metastoreからテーブルを削除すると、テーブル/列のデータとそのメタデータが削除されます。 通常のテーブル(メタストアに格納されている)または外部テーブル(ローカルファイルシステムに格納されている)です。 Hiveは、タイプに関係なく、両方を同じように扱います。
テーブルステートメントの削除
構文は次のとおりです。
次のクエリは、 employee という名前のテーブルを削除します。
クエリが正常に実行されると、次の応答が表示されます。
JDBCプログラム
次のJDBCプログラムは、従業員テーブルを削除します。
HiveDropTable.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
次のクエリを使用して、テーブルのリストを確認します。
Hive-パーティショニング
Hiveはテーブルをパーティションに編成します。 これは、日付、都市、部門などのパーティション化された列の値に基づいて、テーブルを関連部分に分割する方法です。 パーティションを使用すると、データの一部を簡単に照会できます。
テーブルまたはパーティションは*バケット*に細分され、より効率的なクエリに使用できるデータに追加の構造を提供します。 バケットは、テーブルの列のハッシュ関数の値に基づいて機能します。
たとえば、 Tab1 という名前のテーブルには、id、name、dept、yoj(参加年)などの従業員データが含まれます。 2012年に参加したすべての従業員の詳細を取得する必要があるとします。 クエリは、テーブル全体から必要な情報を検索します。 ただし、従業員データを年で分割し、別のファイルに保存すると、クエリの処理時間が短縮されます。 次の例は、ファイルとそのデータをパーティション分割する方法を示しています。
次のファイルには、employeedataテーブルが含まれています。
/tab1/employeedata/file1
上記のデータは、年を使用して2つのファイルに分割されます。
/tab1/employeedata/2012/file2
/tab1/employeedata/2013/file3
パーティションを追加する
テーブルを変更することで、テーブルにパーティションを追加できます。 Id、Name、Salary、Designation、Dept、yojなどのフィールドを持つ employee というテーブルがあると仮定します。
構文:
次のクエリは、従業員テーブルにパーティションを追加するために使用されます。
パーティションの名前を変更する
このコマンドの構文は次のとおりです。
パーティションの名前を変更するには、次のクエリを使用します。
パーティションの削除
パーティションを削除するには、次の構文を使用します。
パーティションを削除するには、次のクエリを使用します。
Hive-組み込み演算子
この章では、Hiveの組み込み演算子について説明します。 Hiveには4種類の演算子があります。
- 関係演算子
- 算術演算子
- 論理演算子
- 複雑な演算子
関係演算子
これらの演算子は、2つのオペランドを比較するために使用されます。 次の表に、Hiveで使用可能な関係演算子を示します。
Operator | Operand | Description |
---|---|---|
A = B | all primitive types | TRUE if expression A is equivalent to expression B otherwise FALSE. |
A != B | all primitive types | TRUE if expression A is not equivalent to expression B otherwise FALSE. |
A < B | all primitive types | TRUE if expression A is less than expression B otherwise FALSE. |
A ⇐ B | all primitive types | TRUE if expression A is less than or equal to expression B otherwise FALSE. |
A > B | all primitive types | TRUE if expression A is greater than expression B otherwise FALSE. |
A >= B | all primitive types | TRUE if expression A is greater than or equal to expression B otherwise FALSE. |
A IS NULL | all types | TRUE if expression A evaluates to NULL otherwise FALSE. |
A IS NOT NULL | all types | FALSE if expression A evaluates to NULL otherwise TRUE. |
A LIKE B | Strings | TRUE if string pattern A matches to B otherwise FALSE. |
A RLIKE B | Strings | NULL if A or B is NULL, TRUE if any substring of A matches the Java regular expression B , otherwise FALSE. |
A REGEXP B | Strings | Same as RLIKE. |
例
上記の表を使用して従業員の詳細を取得するために、次のクエリが実行されます。
クエリが正常に実行されると、次の応答が表示されます。
次のクエリを実行して、給与がRs 40000以上の従業員の詳細を取得します。
クエリが正常に実行されると、次の応答が表示されます。
算術演算子
これらの演算子は、オペランドに対するさまざまな一般的な算術演算をサポートしています。 それらはすべて数値型を返します。 次の表に、Hiveで使用できる算術演算子を示します。
Operators | Operand | Description |
---|---|---|
A + B | all number types | Gives the result of adding A and B. |
A - B | all number types | Gives the result of subtracting B from A. |
A *B | all number types | Gives the result of multiplying A and B. |
A/B | all number types | Gives the result of dividing B from A. |
A % B | all number types | Gives the reminder resulting from dividing A by B. |
A & B | all number types | Gives the result of bitwise AND of A and B. |
A | B | all number types |
Gives the result of bitwise OR of A and B. | A ^ B | all number types |
Gives the result of bitwise XOR of A and B. | ~A | all number types |
例
次のクエリは、20と30の2つの数値を追加します。
クエリが正常に実行されると、次の応答が表示されます。
論理演算子
演算子は論理式です。 それらはすべてTRUEまたはFALSEを返します。
Operators | Operands | Description |
---|---|---|
A AND B | boolean | TRUE if both A and B are TRUE, otherwise FALSE. |
A && B | boolean | Same as A AND B. |
A OR B | boolean | TRUE if either A or B or both are TRUE, otherwise FALSE. |
A | B | |
boolean | Same as A OR B. | NOT A |
boolean | TRUE if A is FALSE, otherwise FALSE. | !A |
例
次のクエリは、部門がTPで給与がRs 40000を超える従業員の詳細を取得するために使用されます。
クエリが正常に実行されると、次の応答が表示されます。
複雑な演算子
これらの演算子は、複合型の要素にアクセスする式を提供します。
Operator | Operand | Description |
---|---|---|
A[n] | A is an Array and n is an int | It returns the nth element in the array A. The first element has index 0. |
M[key] | M is a Map<K, V> and key has type K | It returns the value corresponding to the key in the map. |
S.x | S is a struct | It returns the x field of S. |
Hive-組み込み関数
この章では、Hiveで使用可能な組み込み関数について説明します。 関数は、使用方法を除いて、SQL関数と非常によく似ています。
組み込み関数
Hiveは次の組み込み関数をサポートしています。
戻りタイプ
署名
説明
BIGINT
ラウンド(ダブルA)
doubleの丸められたBIGINT値を返します。
BIGINT
床(ダブルA)
double以下の最大BIGINT値を返します。
BIGINT
ceil(ダブルa)
double以上の最小BIGINT値を返します。
ダブル
rand()、rand(int seed)
行ごとに変化する乱数を返します。
ひも
concat(string A、string B、…)
Aの後にBを連結した結果の文字列を返します。
ひも
substr(string A、int start)
開始位置から文字列Aの終わりまでAの部分文字列を返します。
ひも
substr(string A、int start、int length)
指定された長さの開始位置から始まるAの部分文字列を返します。
ひも
アッパー(文字列A)
Aのすべての文字を大文字に変換した結果の文字列を返します。
ひも
ucase(string A)
同上。
ひも
低い(文字列A)
Bのすべての文字を小文字に変換した結果の文字列を返します。
ひも
lcase(文字列A)
同上。
ひも
トリム(文字列A)
Aの両端からスペースをトリミングした結果の文字列を返します。
ひも
ltrim(文字列A)
Aの先頭(左側)からスペースをトリミングした結果の文字列を返します。
ひも
rtrim(文字列A)
rtrim(string A)Aの末尾(右側)からスペースをトリミングした結果の文字列を返します。
ひも
regexp_replace(文字列A、文字列B、文字列C)
Javaの正規表現構文に一致するBのすべての部分文字列をCに置き換えた結果の文字列を返します。
int
サイズ(Map <K.V>)
マップタイプの要素の数を返します。
int
サイズ(配列<T>)
配列型の要素数を返します。
<type>の値
cast(<expr> as <type>)
式exprの結果を<type>に変換します。 cast( '1' as BIGINT)は、文字列 '1’を整数表現に変換します。 変換が成功しない場合、NULLが返されます。
ひも
from_unixtime(int unixtime)
Unixエポック(1970-01-01 00:00:00 UTC)からの秒数を、「1970-01-01 00:00」の形式で現在のシステムタイムゾーンのその時点のタイムスタンプを表す文字列に変換します。 00 "
ひも
to_date(string timestamp)
タイムスタンプ文字列の日付部分を返します:to_date( "1970-01-01 00:00:00")= "1970-01-01"
int
年(文字列日付)
日付の年の部分またはタイムスタンプ文字列を返します:year( "1970-01-01 00:00:00")= 1970、year( "1970-01-01")= 1970
int
月(文字列の日付)
日付の月の部分またはタイムスタンプ文字列を返します:month( "1970-11-01 00:00:00")= 11、month( "1970-11-01")= 11
int
日(文字列日付)
日付の日付部分またはタイムスタンプ文字列を返します:day( "1970-11-01 00:00:00")= 1、day( "1970-11-01")= 1
ひも
get_json_object(string json_string、string path)
指定されたjsonパスに基づいてjson文字列からjsonオブジェクトを抽出し、抽出されたjsonオブジェクトのjson文字列を返します。 入力json文字列が無効な場合は、NULLを返します。
例
次のクエリは、いくつかの組み込み関数を示しています。
round()関数
クエリが正常に実行されると、次の応答が表示されます。
floor()関数
クエリが正常に実行されると、次の応答が表示されます。
ceil()関数
クエリが正常に実行されると、次の応答が表示されます。
集約関数
Hiveは、次の組み込み*集計関数*をサポートしています。 これらの関数の使用法は、SQL集約関数と同じです。
Return Type | Signature | Description |
---|---|---|
BIGINT | count(*), count(expr), | count(*) - Returns the total number of retrieved rows. |
DOUBLE | sum(col), sum(DISTINCT col) | It returns the sum of the elements in the group or the sum of the distinct values of the column in the group. |
DOUBLE | avg(col), avg(DISTINCT col) | It returns the average of the elements in the group or the average of the distinct values of the column in the group. |
DOUBLE | min(col) | It returns the minimum value of the column in the group. |
DOUBLE | max(col) | It returns the maximum value of the column in the group. |
Hive-ビューとインデックス
この章では、ビューを作成および管理する方法について説明します。 ビューは、ユーザーの要件に基づいて生成されます。 結果セットのデータはすべてビューとして保存できます。 Hiveのビューの使用法は、SQLのビューの使用法と同じです。 これは標準のRDBMSコンセプトです。 ビューですべてのDML操作を実行できます。
ビューを作成する
SELECTステートメントの実行時にビューを作成できます。 構文は次のとおりです。
例
例を見てみましょう。 Id、Name、Salary、Designation、Deptの各フィールドを持つ従業員テーブルを以下のように想定します。 Rs 30000を超える給与を稼ぐ従業員の詳細を取得するクエリを生成します。 結果を* emp_30000。*という名前のビューに保存します
次のクエリは、上記のシナリオを使用して従業員の詳細を取得します。
ビューを削除する
ビューを削除するには、次の構文を使用します。
次のクエリは、emp_30000という名前のビューを削除します。
インデックスを作成する
インデックスは、テーブルの特定の列へのポインタにすぎません。 インデックスの作成とは、テーブルの特定の列にポインターを作成することを意味します。 その構文は次のとおりです。
例
インデックスの例を見てみましょう。 Id、Name、Salary、Designation、Deptの各フィールドで以前に使用したのと同じ従業員テーブルを使用します。 employeeテーブルのsalary列にindex_salaryという名前のインデックスを作成します。
次のクエリはインデックスを作成します。
これは、給与列へのポインタです。 列が変更された場合、変更はインデックス値を使用して保存されます。
インデックスの削除
インデックスを削除するには、次の構文を使用します。
次のクエリは、index_salaryという名前のインデックスを削除します。
HiveQL-Select-Where
Hiveクエリ言語(HiveQL)は、Hiveがメタストア内の構造化データを処理および分析するためのクエリ言語です。 この章では、WHERE句を指定したSELECTステートメントの使用方法について説明します。
SELECTステートメントは、テーブルからデータを取得するために使用されます。 WHERE句は条件と同様に機能します。 条件を使用してデータをフィルタリングし、有限の結果を提供します。 組み込みの演算子と関数は、条件を満たす式を生成します。
構文
以下に、SELECTクエリの構文を示します。
例
SELECT…WHERE句の例を見てみましょう。 Id、Name、Salary、Designation、Deptという名前のフィールドを持つ、以下の従業員テーブルがあるとします。 Rs 30000を超える給与を稼ぐ従業員の詳細を取得するクエリを生成します。
次のクエリは、上記のシナリオを使用して従業員の詳細を取得します。
クエリが正常に実行されると、次の応答が表示されます。
JDBCプログラム
特定の例にwhere句を適用するJDBCプログラムは次のとおりです。
HiveQLWhere.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
HiveQL-選択順
この章では、SELECTステートメントでORDER BY句を使用する方法について説明します。 ORDER BY句を使用して、1つの列に基づいて詳細を取得し、昇順または降順で結果セットを並べ替えます。
構文
以下に、ORDER BY句の構文を示します。
例
SELECT … ORDER BY句の例を見てみましょう。 Id、Name、Salary、Designation、およびDeptという名前のフィールドを持つ従業員テーブルを以下のように想定します。 部門名を使用して、従業員の詳細を順番に取得するクエリを生成します。
次のクエリは、上記のシナリオを使用して従業員の詳細を取得します。
クエリが正常に実行されると、次の応答が表示されます。
JDBCプログラム
次に、指定された例にOrder By句を適用するJDBCプログラムを示します。
HiveQLOrderBy.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
HiveQL-選択グループ
この章では、SELECTステートメントのGROUP BY句の詳細について説明します。 GROUP BY句は、特定のコレクション列を使用して結果セット内のすべてのレコードをグループ化するために使用されます。 レコードのグループを照会するために使用されます。
構文
GROUP BY句の構文は次のとおりです。
例
SELECT…GROUP BY句の例を見てみましょう。 Id、Name、Salary、Designation、およびDeptフィールドを持つ従業員テーブルを以下のように想定します。 各部門の従業員数を取得するクエリを生成します。
次のクエリは、上記のシナリオを使用して従業員の詳細を取得します。
クエリが正常に実行されると、次の応答が表示されます。
JDBCプログラム
以下に示すのは、特定の例にGroup By句を適用するJDBCプログラムです。
HiveQLGroupBy.javaという名前のファイルにプログラムを保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
出力:
HiveQL-選択-結合
JOINは、各テーブルに共通の値を使用して2つのテーブルの特定のフィールドを結合するために使用される句です。 データベース内の2つ以上のテーブルのレコードを結合するために使用されます。
構文
例
この章では、次の2つの表を使用します。 CUSTOMERS。という名前の次の表を検討してください。
次のように別のテーブルORDERSを検討します。
次のようなさまざまなタイプの結合があります。
- JOIN
- 左外部結合
- 右アウタージョイン
- フルアウタージョイン
JOIN
JOIN句は、複数のテーブルからレコードを結合および取得するために使用されます。 JOINは、SQLのOUTER JOINと同じです。 JOIN条件は、テーブルの主キーと外部キーを使用して発生します。
次のクエリは、CUSTOMERテーブルとORDERテーブルでJOINを実行し、レコードを取得します。
クエリが正常に実行されると、次の応答が表示されます。
左外部結合
HiveQL LEFT OUTER JOINは、右側のテーブルに一致するものがない場合でも、左側のテーブルのすべての行を返します。 つまり、ON句が右側のテーブルの0(ゼロ)レコードと一致する場合、JOINは結果に行を返しますが、右側のテーブルの各列にはNULLを返します。
LEFT JOINは、左側のテーブルのすべての値と、右側のテーブルの一致した値を返します。一致するJOIN述語がない場合はNULLを返します。
次のクエリは、CUSTOMERテーブルとORDERテーブル間のLEFT OUTER JOINを示しています。
クエリが正常に実行されると、次の応答が表示されます。
右アウタージョイン
HiveQL RIGHT OUTER JOINは、左のテーブルに一致するものがない場合でも、右のテーブルからすべての行を返します。 ON句が左側のテーブルの0(ゼロ)レコードと一致する場合、JOINは結果に行を返しますが、左側のテーブルの各列にはNULLを返します。
RIGHT JOINは、右側のテーブルのすべての値と、左側のテーブルの一致した値を返します。一致する結合述語がない場合はNULLを返します。
次のクエリは、CUSTOMERテーブルとORDERテーブル間のRIGHT OUTER JOINを示しています。
クエリが正常に実行されると、次の応答が表示されます。
フルアウタージョイン
HiveQL FULL OUTER JOINは、JOIN条件を満たす、左右の外側のテーブルのレコードを結合します。 結合されたテーブルには、両方のテーブルのすべてのレコードが含まれているか、どちらかの側で欠落している一致に対してNULL値が入力されます。
次のクエリは、CUSTOMERテーブルとORDERテーブル間のFULL OUTER JOINを示しています。
クエリが正常に実行されると、次の応答が表示されます。