0こんにちは、髙橋です。暑い日が続いていますが、皆様はいかがお過ごしでしょうか。Hadoopセミナーに参加してきました。セミナーでは、Cloudera社の方や書籍翻訳者の玉川さんのお話を伺うことができ、充実した時間を過ごすことができました。セミナー最後のグッズプレゼントのじゃんけん大会では、景品になっていたHiveTシャツに心惹かれたのですが、残念ながら初戦敗退でした...Hadoopセミナーのように、ビッグデータに関連するセミナーや勉強会も盛んに行われていますので、夏休みのある方はビッグデータについて勉強する絶好の機会だと思います。前ふりはこれくらいにして、今回のブログの内容は、Hiveの対抗馬であるPigについてです。日付毎のデータ数をカウント数Pigとは?Pigとは、Hiveと同様にMapReduceのラッパーであり、Hadoop上で分散処理を実行することが可能なオープンソースソフトウェアです。以前紹介したHiveはHiveQLというSQLライクなクエリを記述することでMapReduceを実行させることができたのに対して、PigはPigLatinというデータフローを記述することによってMapReduceを実行させることができます。特徴として、スクリプトの可読性やデータ処理の柔軟性が高いことが挙げられます。上記のような特徴はありながらも、現状では、PigよりもHiveを利用しているユーザの方が多いようです。Pigであることが挙げられます。そのため、これからHiveかPigのどちらかを触ってみようと考えている方は、わざわざPigを選ばず、Hiveを利用して頂いた方が良いと思います。TreasureDataではPigも利用することができるので、簡単に紹介したいと思います。TreasureDataにおけるPigの実行方法TreasureDataのQueryコマンドでは、Hiveをデフォルトで実行させるようになっています。そのため、-tオプションを用いて、Pigの利用を明示する必要があります。コマンドが長くなってしまうため、PigLatinのスクリプトファイルを作成し、Pigを利用しましょう。スクリプトファイルを読み込んで、Pigを実行するqueryコマンドは下記の通りです。scripts.pigscripts.pigの内容例は、下記の通りです。*;上記スクリプトを実行させることで、tablenameのデータを全件取得することが可能です。ちなみに、Hiveで同様の実行方法をする場合は下記のようになります。tablename次に、TreasureDataのPigを利用する上での注意点が二点あります。LOADコマンドの自動化Pigでは、HDFSからデータを読み込む際に、LOADコマンドを利用します。スクリプト内でテーブル名を呼び出すと自動でテーブルがLOADされるようになっています。STOREコマンドの自動化Pigでは、結果の出力にStoreコマンドを用います。TreasureDataでは、スクリプトの最終行の結果が自動的に出力されます。テーブルの内容を1行だけ取得したい場合、PigLatinでは、ILLUSTRATEコマンドを実行することで各行におけるスクリプトの実行結果を1行ずつ取得することが可能です。日本語のデータは出力されないため、注意が必要です。tablename;TreasureDataにおけるPigの基本的な処理TreasureDataにおけるPigの基本的な処理を紹介していきます。各行の処理を分かり易くするために、1行1行の処理内容を簡潔するようにスクリプトを記述しています。*マップ形式内は、chararray型となっています。host},time:int*マップ形式内は、chararray型となっています。データの取得データを取得する際にはFOREACHコマンドを利用します。vカラムはMap形式になっています。Map形式内のカラムは、v#’column_name’で取得することができます。time;データの件数制限取得(LIMIT)データの取得件数を制限したい場合は、LIMITを利用します。host;重複除去(DISTINCT)重複除去は、DISTINCTを利用します。host;日付毎のデータ数をカウント数Pigの基本的な処理は、SQLと似ているので分かり易いと思います。Pigでの日付関連の処理は、非常に面倒なことになるため注意が必要です。それでは、日付処理を含んだスクリプトを見ていきましょう。www_accessのtimeカラムには秒基準のunixtimeが格納されています。HiveでのUnixTimeは秒基準で処理を行っていますが、Pigではミリ秒基準のため、元のデータに1000倍する必要があります。PigではISOTIMEでの日付処理を行うため、UnixTimeからIsoTimeへの変換も必要です。そのため、日付毎にカウントする場合などは下記の通りになります。(Pigの1行コメントは、–です。cnt;上記クエリを実行した際の各行の結果例は下記の通りです。1Pigは、各行についてのコメントを書くことも容易なため、可読性が良いかと思います。スクリプトが冗長になってしまうと、処理時間に悪影響を及ぼしてしまうため、注意が必要です。以上、簡単ではありますが、Pigの紹介でした。Pigは敷居が高いと思っていましたが、触ってみると意外に分かり易く、この夏が終わる頃にはPig使いになれそうです。みなさんも一緒にPig使いになってみませんか。クエリを一部修正致しました。雑誌等の執筆依頼を受付しております。役に立たなかった0人がこの投稿は役に立ったと言っています。コメントをキャンセルメールアドレスは表示されません。Reserved.本サイトに掲載されている社名、製品名、サービス名等は各社の商標または登録商標です。プライバシーポリシーお問い合わせ。