SlideShare uma empresa Scribd logo
1 de 10
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
PGX ユーザー勉強会 #5
パスクエリを使ったトラバース
2017/11/02
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 1
自己紹介
– 名前: 田上 悠樹
– 職業: ITエンジニア
– 所属: ウルシステムズ株式会社
– 直近の活動: ビジネスデータのグラフモデル化
(販売、生産、商品データなど)
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 2
本日の題材に対するモチベーション
※ パスクエリの詳しいPGQL仕様はこちら↓
https://docs.oracle.com/cd/E56133_01/latest/reference/pgql-specification.html
従来の基幹用データベース
 RDB(Oracle Database, MySQL) 主体。
 異なるレコード同士を『JOIN』を利用して柔軟に紐づけて、価値
のある一まとまりのデータセットを取得する。
グラフデータベースで『JOIN』どう表現するか?
 ノード間のエッジをトラバースすることで、価値のある一まとまり
のデータセットを取得する。
 柔軟にトラバースする方法の1つとして、パスクエリを本日紹介。
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 3
Example#1 起点 から到達可能なノード
– パスを使って到達可能なノードをトラバース
クエリ: あるノード r から到達可能な ノード d の集合
PATH example_path := () –[:eg_label]-> ()
SELECT d
WHERE (r with xxx) -/:example_path */-> (d)
クエリ: あるノード r から到達可能な ノード同士の隣接集合
PATH example_path := () -[:eg_label]-> ()
SELECT s, d
WHERE
(r with xxx) -/:example_path */-> (s) –[:eg_label]-> (d)
一覧として結果取得
したい場合
グラフとして結果取得
したい場合
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 4
Example#1 Demo
クエリ: 渋谷駅 から到達可能な 東急線の駅
PATH rail_path := () -[:東急]- ()
SELECT s, d
WHERE (r with name = ‘渋谷’) -/:rail_path */-> (s) -[:東急]- (d)
無向グラフのケース
vis.js 利用
http://visjs.org/
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 5
Example#2 起点+経由点 から到達可能なノード
– 複数箇所にパスを記述してノードをトラバース
クエリ: あるノード r から あるノード v を経由して到達可能なノード同士の隣接集合
PATH example_path := () -[:eg_label]-> ()
SELECT s, d
WHERE (r with xxx) -/:example_path */-> (v with xxx)
-/:example_path */-> (s) –[:eg_label]-> (d)
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 6
Example#2 Demo
クエリ: 渋谷駅 から田園調布駅 を経由して到達可能な東急線の駅
PATH rail_path := () -[:東急]-> ()
SELECT s, d
WHERE (r with name =‘渋谷’) -/:rail_path */-> (v with name =‘田園調布’)
-/:rail_path */-> (s) –[:東急]-> (d)
パスクエリを
複数回適用
グラフの有向性の関係で東急目黒線を表示できなかったのが、残念。。
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 7
Example#3 複数の異なるパスで到達可能なノード
– 異なる複数種類のパスを定義して、ノードをトラバース
クエリ: あるノード r から 複数の異なるパスで共に到達可能なノード cの集合
PATH example_path1 := () –[:eg_label1]-> ()
PATH example_path2 := () –[:eg_label2]-> ()
SELECT c
WHERE
(r with xxx) -/:example_path1 */-> (c),
(r) -/:example_path2 */-> (c)
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 8
Example#3 Demo
クエリ: 渋谷駅 から 東急線Only と 東京メトロOnly で共に到達可能な駅
PATH rail_path1 := () –[:東急]-> ()
PATH rail_path2 := () –[:東京メトロ]-> ()
SELECT c
WHERE
(r with name =‘渋谷’) -/:example_path1 */-> (c),
(r) -/:example_path2 */-> (c)
日常で有用な意味は
特にありません 笑
緑点: 上記の c
青線: 東急
橙線: 東京メトロ
ULS
Copyright © 2011-2017 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 9
まとめ
– パスクエリに対する考察
 RDBにおける『 JOIN 』に対して、グラフはノード間のエッジをトラ
バースして価値のある一まとまりのデータセットを取得できる。
 単一のPath句で表現できる事には限界があるが、複数種類のパスを複数
箇所で組み合わせることで、トラバースの表現力が高まる。
 PGQL1.1 から更にパスクエリの表現が豊かに!!

Mais conteúdo relacionado

Semelhante a Pgxユーザー勉強会#5 パスクエリを使ったトラバース

PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
Yuki Tagami
 
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn
 
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
Shintaro Hosoai
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
Yasuyuki Sugai
 
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
Insight Technology, Inc.
 

Semelhante a Pgxユーザー勉強会#5 パスクエリを使ったトラバース (20)

Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
 
[Japan Tech summit 2017] MAI 003
[Japan Tech summit 2017] MAI 003[Japan Tech summit 2017] MAI 003
[Japan Tech summit 2017] MAI 003
 
OpenStackによる、実践オンプレミスクラウド
OpenStackによる、実践オンプレミスクラウドOpenStackによる、実践オンプレミスクラウド
OpenStackによる、実践オンプレミスクラウド
 
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005
 
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
PGXユーザー勉強会#10_Built-in アルゴリズム(Shortest-Path, Fattest-Path)
 
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
 
Uart受信設計2013
Uart受信設計2013Uart受信設計2013
Uart受信設計2013
 
Askusa on AWS
Askusa on AWSAskusa on AWS
Askusa on AWS
 
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合dstn交流会_DataSpider のソーシャルとの融合、手組との融合
dstn交流会_DataSpider のソーシャルとの融合、手組との融合
 
Datomic&datalog紹介
Datomic&datalog紹介Datomic&datalog紹介
Datomic&datalog紹介
 
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
 
Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)
 
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
10/2勉強会資料 ~IaaSを知る前にサーバを知ろう~
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
Introduction to extensions and other useful features for developing apps usin...
Introduction to extensions and other useful features for developing apps usin...Introduction to extensions and other useful features for developing apps usin...
Introduction to extensions and other useful features for developing apps usin...
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
 
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
 

Mais de Yuki Tagami

PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
Yuki Tagami
 
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )
Yuki Tagami
 
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
Yuki Tagami
 

Mais de Yuki Tagami (12)

グラフデータからの分析アプローチ
グラフデータからの分析アプローチグラフデータからの分析アプローチ
グラフデータからの分析アプローチ
 
Start Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4JStart Deep Reinforcement Learning with RL4J
Start Deep Reinforcement Learning with RL4J
 
グラフアルゴリズムと機械学習の接点
グラフアルゴリズムと機械学習の接点グラフアルゴリズムと機械学習の接点
グラフアルゴリズムと機械学習の接点
 
PGX ユーザー勉強会 #15 LT Ant Colony Optimization
PGX ユーザー勉強会 #15 LT Ant Colony OptimizationPGX ユーザー勉強会 #15 LT Ant Colony Optimization
PGX ユーザー勉強会 #15 LT Ant Colony Optimization
 
RL4J で始める深層強化学習
RL4J で始める深層強化学習RL4J で始める深層強化学習
RL4J で始める深層強化学習
 
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
PGX ユーザー勉強会 #14 LT Built-in アルゴリズム ( Prim's Algorithm )
 
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )PGX ユーザー勉強会 #13  LT Built-in アルゴリズム( Topological Ordering Algorithm )
PGX ユーザー勉強会 #13 LT Built-in アルゴリズム( Topological Ordering Algorithm )
 
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
PGXユーザー勉強会#12_Built-in アルゴリズム(Label Propagation Algorithm)
 
Graph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたGraph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみた
 
Graph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみたGraph DB のユニークさについて考えてみた
Graph DB のユニークさについて考えてみた
 
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリングいまさらアジャイル巡業 In Tokyo アジャイルモデリング
いまさらアジャイル巡業 In Tokyo アジャイルモデリング
 
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
ULSアジャイル推進室 基幹系システムの再構築におけるDDD事例 20160312
 

Pgxユーザー勉強会#5 パスクエリを使ったトラバース

  • 1. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by PGX ユーザー勉強会 #5 パスクエリを使ったトラバース 2017/11/02
  • 2. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 1 自己紹介 – 名前: 田上 悠樹 – 職業: ITエンジニア – 所属: ウルシステムズ株式会社 – 直近の活動: ビジネスデータのグラフモデル化 (販売、生産、商品データなど)
  • 3. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 2 本日の題材に対するモチベーション ※ パスクエリの詳しいPGQL仕様はこちら↓ https://docs.oracle.com/cd/E56133_01/latest/reference/pgql-specification.html 従来の基幹用データベース  RDB(Oracle Database, MySQL) 主体。  異なるレコード同士を『JOIN』を利用して柔軟に紐づけて、価値 のある一まとまりのデータセットを取得する。 グラフデータベースで『JOIN』どう表現するか?  ノード間のエッジをトラバースすることで、価値のある一まとまり のデータセットを取得する。  柔軟にトラバースする方法の1つとして、パスクエリを本日紹介。
  • 4. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 3 Example#1 起点 から到達可能なノード – パスを使って到達可能なノードをトラバース クエリ: あるノード r から到達可能な ノード d の集合 PATH example_path := () –[:eg_label]-> () SELECT d WHERE (r with xxx) -/:example_path */-> (d) クエリ: あるノード r から到達可能な ノード同士の隣接集合 PATH example_path := () -[:eg_label]-> () SELECT s, d WHERE (r with xxx) -/:example_path */-> (s) –[:eg_label]-> (d) 一覧として結果取得 したい場合 グラフとして結果取得 したい場合
  • 5. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 4 Example#1 Demo クエリ: 渋谷駅 から到達可能な 東急線の駅 PATH rail_path := () -[:東急]- () SELECT s, d WHERE (r with name = ‘渋谷’) -/:rail_path */-> (s) -[:東急]- (d) 無向グラフのケース vis.js 利用 http://visjs.org/
  • 6. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 5 Example#2 起点+経由点 から到達可能なノード – 複数箇所にパスを記述してノードをトラバース クエリ: あるノード r から あるノード v を経由して到達可能なノード同士の隣接集合 PATH example_path := () -[:eg_label]-> () SELECT s, d WHERE (r with xxx) -/:example_path */-> (v with xxx) -/:example_path */-> (s) –[:eg_label]-> (d)
  • 7. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 6 Example#2 Demo クエリ: 渋谷駅 から田園調布駅 を経由して到達可能な東急線の駅 PATH rail_path := () -[:東急]-> () SELECT s, d WHERE (r with name =‘渋谷’) -/:rail_path */-> (v with name =‘田園調布’) -/:rail_path */-> (s) –[:東急]-> (d) パスクエリを 複数回適用 グラフの有向性の関係で東急目黒線を表示できなかったのが、残念。。
  • 8. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 7 Example#3 複数の異なるパスで到達可能なノード – 異なる複数種類のパスを定義して、ノードをトラバース クエリ: あるノード r から 複数の異なるパスで共に到達可能なノード cの集合 PATH example_path1 := () –[:eg_label1]-> () PATH example_path2 := () –[:eg_label2]-> () SELECT c WHERE (r with xxx) -/:example_path1 */-> (c), (r) -/:example_path2 */-> (c)
  • 9. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 8 Example#3 Demo クエリ: 渋谷駅 から 東急線Only と 東京メトロOnly で共に到達可能な駅 PATH rail_path1 := () –[:東急]-> () PATH rail_path2 := () –[:東京メトロ]-> () SELECT c WHERE (r with name =‘渋谷’) -/:example_path1 */-> (c), (r) -/:example_path2 */-> (c) 日常で有用な意味は 特にありません 笑 緑点: 上記の c 青線: 東急 橙線: 東京メトロ
  • 10. ULS Copyright © 2011-2017 UL Systems, Inc. All rights reserved. Proprietary & Confidential Powered by 9 まとめ – パスクエリに対する考察  RDBにおける『 JOIN 』に対して、グラフはノード間のエッジをトラ バースして価値のある一まとまりのデータセットを取得できる。  単一のPath句で表現できる事には限界があるが、複数種類のパスを複数 箇所で組み合わせることで、トラバースの表現力が高まる。  PGQL1.1 から更にパスクエリの表現が豊かに!!