
HiveQLはHiveでデータを操作するためのSQLに非常によく似た言語です。前編で述べた通り、Create table文、Load文、Insert文、Select文が基本構文になります。
- Create Table文
カラム定義の部分については一般的なSQLのCreate table文とほとんど同じです(図4)。データ型は多くの場合string型かint型を選択します。MySQLにあるようなdateなどの日付型はありません。日付関数のようなものはありますが、基本的に日付はstring扱いになります。一般的なSQLと大きく異なるのは、CREATE直後のEXTERNALオプションと、カラム定義の後のROW FORMAT句などです。
EXTERNALオプションは、前編で述べたようにHadoop(HDFS)上の既存データに対して後からテーブルを作る場合に必要なオプションです。EXTERNALオプションを付けると実体となるデータファイルをこのテーブルの操作と関係なく自由に置き換えられます。EXTERNALオプションを付けなければ、一般的なRDBと同じようにテーブル操作に影響されます。テーブルを削除すればHadoop(HDFS)上のデータファイルも消えてしまいます。
ROW FORMAT句はデータの区切り文字を指定します(カンマ区切りやタブ区切りなど)。STORED句はデータの保存形式で、主にHadoopのファイル形式であるSEQUENCEFILEか、一般的なテキストファイルのTEXTFILEを指定します。LOCATION句は保存先のHadoop(HDFS)上のディレクトリを指定します。
- Load文
Load文はMySQLのLoad文に似ています(図5)。LOCALオプションを付けると、ローカルサーバー上のファイルをアップロードすることができます。OVERWRITEオプションを付けるとLoad先のデータが入れ替わります。OVERWRITEオプションがなければテーブルの既存データに追記されます。次に紹介するHiveのInsert文はこのOVERWRITE付きが前提になるため、データを追記するという点では、MySQLなどに実装されているバルクInsert文がこのLoad文に最も近いと思われます。
- Insert文(Insert~Select文)
HiveのInsert文はSelect文と組み合わせて、Insert~Select文の形で使います(図6, 図7)。Insert直後のOVERWRITEは任意ではなく必須です。そのため、HiveのInsert文は必ずデータ入れ替えになります。Insert文の主な使い方は、Select文で加工・集計して別のデータとして保存することです。Insert先にはローカルファイルを直接指定することもできます。
加工・集計は一般のSQLと同じようにSelect文のWhere句やGroup By句、関数を使って行います。特徴的なのはWhere句のRLIKE演算子で、正規表現が使えるためSQLのLIKE演算子より強力です。また、正規表現を使ってカラム値を整形するregexp_replaceのような関数もあり、文字列の加工は強いです。
Group Byで利用できる関数も、RDBほどたくさんありませんが、カウントやサム、アベレージなどの基本的な関数は用意されています。Hiveでカウントするにはcount(*)ではなく、count(1)と書かなくてはいけません。
複雑な集計は、何段階かに分けてInsert~Select文を使用したり、サブクエリを使ったりすることで補うことができます。
- Select文 Insert~Select文のSelect文と同じです。Select文はInsert文と組み合わせなくても単独で実行できます。
HiveQLを組み合わせれば、ほとんどSQLの知識だけでMapReduceのプログラムを一から作り込まなくても加工・集計ができるので、非常に便利です。
GMOとくとくショップでは、日々のサーバーログを使って「人気キーワード」や「人気商品」をHiveを使って自動集計しています。サーバーログを集計に適した形に整形してTSVファイルとしてHadoop上に毎日作成します。このTSVファイルをEXTERNALオプション付きのテーブルとして扱って集計を行っています。
また、HiveはHadoopのdfsコマンドをHiveクライアントから利用することができます。GMOとくとくショップでは最終的にローカルファイルとして結果を取り出すために、ローカルファイルに出力するInsert文ではなく、Hiveのクライアントからdfs -getコマンドを使う方法を採用しました。その方が簡単に取り出せるためです。
GMOとくとくショップでは、これらの処理をシェルスクリプト化して日々運用しています。
最後に…次世代システム研究室ではクラウドを作りたいエンジニアを募集しています。ご興味がある方はこちらからエントリーをお願いします。
- 【第2回】「GMOとくとくショップ」オープンにあたって - GMOとくとくショップと最新テクノロジー -
- 【第7回】「GMOとくとくショップ」に組み込まれたテクノロジー(前編)- Hadoopをどのように利用しているか? -
- 【第7回】「GMOとくとくショップ」に組み込まれたテクノロジー(後編)- Hadoopを使った構築方法やチューニングポイント、運用管理 -
- 【第10回】「GMOとくとくショップ」で利用しているMySQLクラスターとは?(前編)- MySQLクラスターの仕組みについて -
- 【第10回】「GMOとくとくショップ」で利用しているMySQLクラスターとは?(後編)- MySQLクラスター構築方法と運用管理 -
- 【第13回】「GMOとくとくショップ」で利用しているEucalyptusとは?(前編)- Eucalyptusの仕組みについて -
- 【第16回】「GMOとくとくショップ」のHadoop集計-Hiveの利用方法-(前編)- Hiveをどのように利用しているか? -
- 【第19回】「GMOとくとくショップ」で利用しているアプリケーションフレームワークについて- Webアプリケーションフレームワークとは? -
*本文中に記載されている会社名および商品名・サービス名は、各社の商標 または登録商標です。





























