Jaql
Jaql (JAQL) はJSONで格納されたビッグデータに対する問い合わせ処理を目的とした、関数型データ処理およびクエリ言語である。
Google[1]のオープンソースプロジェクトとして開始されたが、最新のリリースは2010年7月12日. IBM[2]はBigInsightsというHadoopソフトウェア・パッケージの処置言語として、Jaqlを採用した。
また、JSON のみならず CSV、TSV、XMLなどにも対応する。
A[3] によると、PIG Latin and Hive QL などの他の問い合わせ言語に比べても、遜色のないパフォーマンスを打ち出している。
文法
[編集]JAQLの基本的な文法
source -> operator(parameter) -> sink ;
ここでsinkは演算元ともなり得る。 したがって、通常、JAQLプログラムは、データ処理グラフを表現して、次の構造をとる必要がある。
source -> operator1(parameter) -> operator2(parameter) -> operator2(parameter) -> operator3(parameter) -> operator4(parameter) -> sink ;
一般的には以下のように、矢印の後にJAQLプログラムを改行させて読みやすくする。これはTwitter SCALDINGの共通のイディオムでもあります。
source -> operator1(parameter)
-> operator2(parameter)
-> operator2(parameter)
-> operator3(parameter)
-> operator4(parameter)
-> sink ;
EXPAND
[編集]EXPAND
式を使用して、ネストされた配列をフラット化します。 この式は、ネストされた配列Tの配列を入力として受け取り、各ネストされた配列の要素を最上位の出力配列に昇格させることによって出力配列[T]を生成します。
FILTER
[編集]FILTER
演算子を使用して、指定された入力配列から要素を除外します。 この演算子は、型Tの要素の配列を入力として受け取り、同じ型の配列を出力し、述語が真と評価される要素を保持します。 これは、SQL言語のWHERE
句に相当します。
例:
data = [
{name: "Jon Doe", income: 20000, mgr: false},
{name: "Vince Wayne", income: 32500, mgr: false},
{name: "Jane Dean", income: 72000, mgr: true},
{name: "Alex Smith", income: 25000, mgr: false}
];
data -> filter $.mgr;
[
{
"income": 72000,
"mgr": true,
"name": "Jane Dean"
}
]
data -> filter $.income < 30000;
[
{
"income": 20000,
"mgr": false,
"name": "Jon Doe"
},
{
"income": 25000,
"mgr": false,
"name": "Alex Smith"
}
]
GROUP
[編集]GROUP
式を使用して、1つまたは複数の入力配列をグループ化キーにグループ化し、グループごとに集計関数を適用します。
JOIN
[編集]JOIN
演算子を使用して、2つ以上の入力配列間の結合を表現します。 この演算子は、natural
、left-outer
、right-outer
、outer joins
を含む複数のタイプの結合をサポートします。
SORT
[編集]入力を1つ以上のフィールドでソートするにはSORT
演算子を使用します。
TOP
[編集]TOP
式は、入力の最初の個の要素を選択します。 コンパレータが提供されている場合、出力は入力をソートし、最初の個の要素を選択することと意味的に同じです。
TRANSFORM
[編集]TRANSFORM
演算子を使用すると、プロジェクションを実現したり、出力のすべての項目に関数を適用できます。