SSMS 17.0 RC3 で SQL Server v.Next に接続をすると「グラフテーブル」というテーブルが表示されるようになります。
# SQL Database v12 に接続した場合も「Graph Table」が表示されます。
SQL Server のグラフテーブルは「ノードテーブル」「エッジテーブル」で構成されることが確認でき、構文自体も確認することができます。
CREATE TABLE dbo.sample_nodetable ( c1 int NOT NULL, c2 char(10) NULL, c3 datetime NULL, -- Unique index on $nodeid is required INDEX ix_graphid UNIQUE ($nodeid) ) AS NODE GO CREATE TABLE dbo.sample_edgetable ( -- Columns are optional for Edge Tables -- c1 int NOT NULL, c2 char(10) NULL, c3 datetime NULL, -- Unique index on $edgeid is required INDEX ix_graphid UNIQUE ($edgeid), -- indexes on $fromid and $toid support faster lookups INDEX ix_fromid ($fromid), INDEX ix_toid ($toid) ) AS EDGE GO
現状、この構文を実行するだけでは、構文エラーとなりグラフテーブルを作成することができないのですが、PASS SUMMIT 2016 の「What’s New in Azure SQL Database」というセッションで、グラフテーブルについても解説がされていましたので、情報をまとめてみたいと思います。
グラフテーブルのノード / エッジは一般的なグラフデータベースやソーシャルグラフのノードとエッジの関係と同じようです。
ノード (節) と、ノードを接続するエッジ (枝) で構成され、このノードとエッジがテーブルで構成しているのがグラフテーブルとなるようです。
グラフテーブルを検索する際には「MATCH 句」を使用することで、ノードとエッジのつながりを指定するようになるようです。
セッション内では、以下のような WHERE 句が指定されていました。
WHERE MATCH(S - (MO) -> M - (R) -> F - (A) -> M1)
()内がエッジとなり、ノードがどのように伸びているかを条件として指定するようになるようです。
ノードテーブルやエッジテーブルのオプションとして指定した列についても WHERE 句で指定ができるようなので、値と節のつながりを条件に検索ができるようになっているようです。
SQL Server のグラフテーブルは
- Full CROUD Support
- Query Language Extension
- Integrated in SQL Engine
- Tooling and Echo-system
となっており、SQL Server に統合された、通常のテーブルと同じで、T-SQL ベースでの操作が可能な実装となっているようです。
SSMS で検索した結果としては、単純なテーブルの結果として表示されるようですが、Power BI の Force-Directed Graph を使用した可視化も実施できるようです。
このカスタムビジュアルは Source / Target を指定することで、以下のようなグラフを作成することができるのですが、このような表現の元データとして、グラフテーブルのデータを使用することができるようです。
現状、公開されている情報としては Some cool SQL Server announcements SQL Graph, Adaptive Query Plan, CTP1 of SQL vNext, SQL Injection detection ぐらいのようですが、今後の情報が楽しみな機能ですね。