Pig Latin(Pigの独自言語。Latinは「ラテン」と読むらしい)のメモ。
|
|
Pigの命令は基本的にセミコロン「;」を末尾に付けて実行する。
ただし命令の終わりとして解釈できる場合はセミコロン無しでも実行される。
命令は大文字でも小文字でも認識される。
ただし関数は大文字小文字が区別される。
コメントは「/* 〜 */」か、「-- 〜」。[2011-12-24]
| 命令 | 説明 | 例 |
|---|---|---|
| help | ヘルプを表示する。 | help |
| quit | Pigを終了する。 | quit |
| sh | シェルを実行する。 | sh ls |
| exec run |
Pigスクリプトを実行する。 execは定義されているエイリアスを含めるが runは含めない。[2011-09-22] |
|
| kill | ジョブを終了させる。 | |
| set | パラメーターを設定する。 | |
| register | 使用するjarファイルを読み込む。 ユーザー定義関数(UDF)を使えるようにする。 |
register /cygwin/tmp/myudf.jar |
| define | 関数名を定義する。 | define myfunc myudf.SampleUDF(); |
Pig Latinではデータ(処理内容)を記述し、(基本的に)変数に代入しておくような書き方をする。
この変数は「alias(別名)」
あるいは「relation」と呼ばれる。(『Hadoop徹底入門』では「リレーション」と呼んでいるがヘルプではaliasと書かれている)
変数 = データ定義や処理内容;
データ処理の記述は、以前の処理結果である変数名(エイリアス)を指定し、そのデータを入力として新しいデータを生成するイメージ。
実際のデータ処理の実行は、実行する為の命令
(dumpやstore)を記述したときに行われる。
各データにはフィールド(カラム)が複数存在することになる。
loadやforeach等でフィールド名(項目名)を付けることが出来る。(項目名はdescribeで確認できる)
項目名を付けた場合も付けない場合も、$0,$1,$2,…という名前でフィールドを指定できる。
| 命令 | 類似 | 説明 | 例 |
|---|---|---|---|
| load | SQLのCREATE TABLE | 読み込むファイルを指定する。 項目定義も同時に行うことが出来る。 PigStrorage()で区切り文字を指定できる。 デフォルトの区切り文字はタブ「 '\t'」。 |
a1 = load '/cygwin/tmp/hello.txt'; |
| aliases | 現在定義されているエイリアスの一覧を表示する。 | aliases |
|
| describe | エイリアスの(出力結果の)項目定義を表示する。 | describe a3 |
|
| explain | エイリアスの実行計画を表示する。 | explain a3 |
|
| dump | エイリアスを実行し、結果を表示(コンソールに出力)する。 | dump a3 |
|
| store | エイリアスを実行し、結果をファイルに出力する。 指定するパスはディレクトリーであり、MapReduceの実行結果がその中に入る。 ディレクトリーが既に存在していたらエラーになる。(→rmで消せる) PigStorage()で区切り文字を指定できる。 |
store a3 into '/cygwin/tmp/a3/output'; |
|
| foreach | Scalaのmap SQLのSELECT |
データの変換(項目の絞り込みや関数の呼び出し)を行う。 関数は大文字小文字が区別される。 |
e3 = foreach a3 generate t1,t2; |
| ScalaのflatMap | falttenで1項目内の複数データを複数行データに変換できる。 | ff = foreach a2 generate flatten(TOKENIZE(text))
as word; |
|
| filter | Scalaのfilter SQLのWHERE |
データの抽出(条件による抽出)を行う。 | f = filter a3 by t2 == 'World'; |
| split | 条件ごとに別のエイリアスへ出力する。 条件によっては同じデータが複数のエイリアスへ出力される。 これはエイリアスに代入する書式ではないのでちょっと特殊。 |
split a3 into |
|
| group | ScalaのgroupBy SQLのGROUP BY |
データをキー毎に集約する。 キー項目の名前は「group」、集約された各データは入力のエイリアス名となる。 (describeで見てみると分かる) |
g1 = group a3 by t1; |
| cogroup | 複数のエイリアスに対してキー毎に集約する。 | cg = cogroup a3 by t1, zzz by z1; |
|
| join | SQLのJOIN | 複数のエイリアスを結合する。 left・right・fullが指定可能。何もつけなければinner join。 |
j1 = join d1 by id1, m1 by id1; |
| cross | クロスジョイン。 | c1 = cross a1, a2; |
|
| union | SQLのUNION ALL Scalaの++ |
(同一項目数の)複数エイリアスを1つにまとめる。 | u1 = union a1,a2; |
| distinct | Scalaのdistinct SQLのDISTINCT |
重複データを排除する。 | dis = distinct a1; |
| order | SQLのORDER BY | データをソートする。 | o1 = order a3 by t1 asc, t2 desc; |
| limit | SQLのLIMIT Scalaのtake |
出力件数を制限する。 | lim1 = limit a1 10; |
| sample | サンプリング(ランダムな抽出)を行う。 | ||
| mapreduce | HadoopのMapReduceを実行する。 | ||
| stream | スクリプトを実行する。 |
HDFSをUNIXのようなコマンド(lsやcd・pwd・cat・cp等)で操作できる。
hadoopシェル(HDFS)のfs系コマンドでは基本的にフルパスで指定するが、Pigではカレントディレクトリーの概念を使える。
| 命令 | 説明 | 例 |
|---|---|---|
| ls | カレントディレクトリーのファイル一覧を表示する。 | ls |
| pwd | カレントディレクトリー名を表示する。 | pwd |
| cd | カレントディレクトリーを移動する。 | cd /cygwin/tmp |
| cat | ファイルの内容を表示する。 | cat hello.txt |
| cp | ファイルコピー | |
| mv | ファイル移動(改名) | |
| copyFromLocal | ローカル→HDFSへのファイルコピー | |
| copyToLocal | HDFS→ローカルへのファイルコピー ファイルもディレクトリーもコピーできるが、ワイルドカードは使えない。[2011-09-22] |
|
| mkdir | ディレクトリー作成 | |
| rm rmf |
ファイル・ディレクトリー削除 ディレクトリーが空でなくても消せる。 rmは対象が存在しないとエラーになる。[2011-09-28] rmfは存在しなくてもエラーにならない。 |
rm /cygwin/tmp/a3/output |
| fs | Hadoopのfs系コマンドを実行する。 | fs -ls |