Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

「Jaql」を使ってMapReduceをより簡単に

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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/12/24 14:00

 Jaql(a query language desired for JSON:JSON用に位置づけられたクエリ言語)は、JSON型式のデータを処理するためのクエリ言語で、Apache HadoopのMapReduceを処理するための実装が存在します。本稿ではJaqlの概要と使い方の基礎を紹介します。

目次

 Jaql(a query language desired for JSON:JSON用に位置づけられたクエリ言語)は、JSON型式のデータを処理するためのクエリ言語で、Apache HadoopのMapReduceを処理するための実装が存在します。日本語では「じゃっくる」と発音します。ジャッカルに似ているため、一部のサイトにはジャッカルの写真が掲載されていました。

 もともとはIBMのアルマデン研究所で研究・開発され、オープンソースへ提案されました。本原稿執筆時点では、Apache Incubatorプロジェクトになっており、Google Codeのサイトで開発が進められています。

 本記事執筆時点では、つい先頃リリースされた、Jaql 0.5.1をベースに解説しています。

1. JSONの基礎

 JSON(JavaScript Object Notation)は、JavaScriptで「オブジェクト」と呼んでいるデータの塊を表記する方法を指しています。JavaScriptのオブジェクトは、大きく分けると、「名前:値」のペアを複数持つものと、「配列」の2種類があります。

 名前と値のペアは、コロン「:」でつなぎ、カンマ「,」で区切って並べ、{ と } で全体を囲むとオブジェクトとなります。

リスト1 JSONの名前:値ペアの例
{ "name":"米持幸寿", "address":"東京都" }

 ダブルクォート、またはシングルクォートが使い分けられます。名前はクォートなしでも多くの場合動作しますが、仕様(RFC4627)上はクォートで囲むのが正式です(もとになったECMAScriptでは許可されているため、多くの実装でクォートなしでも動作します)。値には、例にあるようにテキストや数値が使えます。値にオブジェクトを付けることもできます。JavaScriptでは、関数もオブジェクトなので、関数を値として接続することも可能です(ただし、JSON/Jaqlの世界では関数は操作しません)。

リスト2 JSONオブジェクトや関数を含むJSONオブジェクト
{
   "person" : {
      "name" : "米持 幸寿",
      "address" : "東京都"
   },

   alertme : function() {
      alert(this.person.name + "は"
         + this.person.address+"勤務")
   }
}

 リスト2のオブジェクトを変数yoneに代入し、yone.alertme()と実行(全体を<script>タグで囲んでWebブラウザで開くなど)すると「米持幸寿は東京都勤務」と表示されます。

 配列は、[ と ] で全体を囲み、値、オブジェクトなどを、カンマ「,」で区切って並べます。

リスト3 JSONの配列
[1, 2, 3, 4]

 異なるオブジェクトを配列として並べることもできます。

リスト4 混在の配列
[
   1,
   "a",
   { "name": "米持 幸寿", "address" : "東京都"} ,
   function() { alert('test');}
]

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

著者プロフィール

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

    日本アイ・ビー・エム公認 ソフトウェア・エバンジェリスト。alphaWorks、developerWorks、インキュベーション系製品、アセットなどのテクノロジーの推進をしつつ、テクノロジー戦略、エバンジェリストチームをリードしている。講演や執筆も多数。主な著書に「かんたんサーバーサイドJava」(...

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5