SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

「Jaql」関数を追加する

Jaql(a query language desired for JSON)の使い方 その2

  • このエントリーをはてなブックマークに追加

 Jaql(a query language desired for JSON:JSON用に位置づけられたクエリ言語)は、JSON型式のデータを処理するためのクエリ言語です。以前の記事では、Jaqlの概要と使い方の基礎を紹介しました。今回は、Jaqlで使われる関数を追加し、記述の簡素化や再利用といったより高度な処理を実現する方法を説明します。

  • このエントリーをはてなブックマークに追加

Jaql関数を追加する

 Jaqlは、Hadoopで実行されるMapReduceジョブを短い構文で記述できるスクリプト言語です。こちらに紹介記事『「Jaql」を使ってMapReduceをより簡単に』(CodeZine)があります。

 本記事では、Jaqlで使われる関数を追加し、Jaqlの記述をより簡素化したり、再利用したり、より高度な処理をJava(TM)で実現したりする方法について説明します。

Jaql既存関数の一覧

 関数の追加を検討するにあたり、既存の機能(演算子、ビルトイン関数)などを調査しておく必要があります。すでにあるものを追加する意味はありません。

Jaql関数

 Jaqlで関数を記述して再利用できます。記述形式は以下のようになります。

関数名 = fn(引数リスト)(ロジック)

 次の例では、引数aとbを受け取り、値を足し算して返します。

myNewFn = fn(a, b) (
    a + b
);
myNewFn(1,2);

 実行すると、以下のようになります。

3

Jaql関数のモジュール化

 Jaql関数は、Jaqlスクリプトの前部に書いておけば動作しますが、一度書いたものを何度も書き直さずに再利用したいものです。そこで、分離したスクリプトファイルに書きこんで再利用するのが「モジュール」です。モジュールには、変数定義が書けるため、リテラルデータや、関数を書いておくことができます。

 モジュールは、拡張子「.jaql」で終わるファイルとして、保存し、実行時に読み込みます。たとえば、先ほどの「myNewFn」の定義をmodule1.jaqlに書いておきます。

 モジュールが置いてある場所は、jaqlshellを起動するときの「jp」パラメーターで指定する必要があります。たとえば、/home/idcuser/mymodulesにモジュールを置き、/home/idcuserでjaqlshellを起動するとしたら、以下のように指定します。

jaqlshell -jp mymodules

 例えば、起動後のスクリプトの先頭で、以下のようにしてインポートします。

import module1;

 同じ例で、/home/idcuser/mymodules/lib1/module2.jaqlのようにサブフォルダーに分類することもできます。このとき、サブフォルダーにあるファイルは、以下のように、コロン二つ「::」で接続してインポートします。

import lib1::module2;

 インポートが済んだら、モジュール名::関数名で呼び出しが可能となります。

module1::myNewFn(1,2);

 モジュール名を書くのが面倒であれば、モジュール名にカッコ( )をつけて関数名を指定してインポートすると、モジュール名を省略して利用できます。

import module1(myNewFn);
myNewFn(1,2);

 (*)と記述することで、同じファイルに定義されているすべての関数を読み込むこともできます。

import module1(*);
myNewFn(1,2);

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Javaによる拡張

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

米持 幸寿(ヨネモチ ユキヒサ)

日本アイ・ビー・エム公認 ソフトウェア・エバンジェリスト。alphaWorks、developerWorks、インキュベーション系製品、アセットなどのテクノロジーの推進をしつつ、テクノロジー戦略、エバンジェリストチームをリードしている。講演や執筆も多数。主な著書に「かんたんサーバーサイドJava」(翔泳社)、「Webサービス完全解説」(翔泳社)がある。developerWorks Japan ブログ 「米持幸寿のブログ

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6422 2012/03/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング