Couchbase Server固有のJOIN句〜実例による解説
はじめに
ここでは、Couchbase ServerのN1QLで利用することのできる、二つの特殊なJOINのタイプについて解説します(CouchbaseのJOINには3つの種類が存在し、もう一つはANSI JOINです)。
この二つのJOINは、それぞれ混同しやすいCouchbase独自のキーワードを持ちます。すなわち、ON KEYS
とON KEY
です。
公式ドキュメント(後掲)にあたることにより、構文の理解(句中の右辺、左辺の意味)を得ることができますが、ここでは、直感的な理解を助ける事を意図し、実例による解説を行います。
Lookup JOIN
ON KEYS
句を用います。
利用例
SELECT DISTINCT airline.name, airline.callsign, route.destinationairport, route.stops, route.airline
FROM `travel-sample` route
JOIN `travel-sample` airline
ON KEYS route.airlineid
WHERE route.type = "route"
AND airline.type = "airline"
AND route.sourceairport = "SFO"
AND route.stops = 0
LIMIT 4;
データモデル
- 「ルート」と「エアライン」という、二つの種類のデータモデルがある
- 「ルート」モデルのデータ構造は、「エアライン」(への参照)を含む
クエリの目的
- 特定の条件(SFO発の直行便)を満たす「ルート」の情報とともに、その「ルート」が持つ「エアライン」の情報を取得する
Index JOIN
ON KEY
句を用います。
利用例
SELECT * FROM `travel-sample` airline
JOIN `travel-sample` route
ON KEY route.airlineid FOR airline
WHERE route.type="route"
AND airline.type="airline"
AND airline.icao = "MLA";
データモデル
データモデル
- 「ルート」と「エアライン」という、二つの種類のデータモデルがある
- 「ルート」モデルのデータ構造は、「エアライン」(への参照)を含む
クエリの目的
- 特定の条件(ICAOコード「MLA」)を満たす「エアライン」から、「ルート」で用いられているものを抽出し、その情報を取得する
注意
上記のクエリを実行するためには、下記のインデックスが必ず必要になります( travel-sample
バケットのプライマリーインデックスで代替することはできません)。
CREATE INDEX airline_icao ON `travel-sample`(icao) WHERE type="airline";
最後に
なぜ、それぞれのキーワードに、単数形・複数形が用いられているかを考えてみるのも、興味深い試みかと思います。
最後に、蛇足となりそうですが、公式ドキュメントのAdaptive Indexの章では、ここで扱ったINDEX JOINでは、Array Index(Adaptive Indexを含む)を利用できない、とされています。現実のプロジェクトでの応用の経験がないため、確定的なことは言えませんが、おそらくあまり意識しなければならない場面はないのではないかとも思われます。
参考情報
公式ドキュメント
Author And Source
この問題について(Couchbase Server固有のJOIN句〜実例による解説), 我々は、より多くの情報をここで見つけました https://qiita.com/yoshiyuki_kono/items/326f032528aa69677649著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .