スキーマの定義

はじめに

このチュートリアルでは、主にGSQLシェルのインタラクティブモードで操作を行います。一部分のコマンドはLinuxシェルで実行します。GSQLグラフを作成するには、まずグラフに適用するスキーマを作成します。GSQLには、頂点とエッジのタイプとグラフを形成するためのDDL (Data Definition Language) コマンドが用意されています。DDL(データ定義言語)コマンドは、SQL DDLコマンドに類似しています。

頂点タイプの作成

CREATE VERTEXコマンドを使い、personという名前の頂点タイプを定義します。ここでは、personを個別に一意的に識別するPRIMARY_IDが必要です。その他、リストには任意の属性が表示されています。属性は、各々のpersonの頂点を特徴付けるもので、形式は attribute_name data_type、attribute_name data_type... のようになります。

GSQLコマンド
CREATE VERTEX person (
    PRIMARY_ID name STRING,
    name STRING, age INT,
    gender STRING, state STRING
)

以下、GSQLのキーワードは大文字を使って表記されていますが、実際には大文字と小文字が区別されます。

GSQLによって頂点タイプが作成されたことが確認されます。

GSQLシェル
GSQL > CREATE VERTEX person (PRIMARY_ID name STRING, name STRING, age INT, gender STRING, state STRING)
The vertex type person is created.
GSQL >

作成できる頂点タイプの数に制限はありません。

エッジタイプの作成

次にCREATE … EDGEコマンドを使用して、friendshipという名前のエッジタイプを定義します。キーワードのUNDIRECTED(無向)は、エッジが双方向性であることを表し、2つの頂点のどちらからも情報が流れて来る可能性を意味しています。FROMの頂点からのみ情報が流れる、一方向の接続を選ぶ場合は、UNDIRECTEDではなく、DIRECTED(有向)を使用します。ここでは、FROMとTOは、エッジタイプが結びつく2つの頂点のタイプを指定するために必要です。エッジは、情報のソース (FROM) となる頂点とターゲット (TO) となる頂点を、各々のプライマリIDで指定します。その次に、頂点の定義の場合と同じように、任意の属性のリストが並びます。

GSQLコマンド
CREATE UNDIRECTED EDGE friendship (FROM person, TO person, connect_day DATETIME)

GSQLによってエッジタイプの作成が確認されます。

GSQLシェル
GSQL > CREATE UNDIRECTED EDGE friendship (FROM person, TO person, connect_day DATETIME)
The edge type friendship is created.
GSQL >

作成できるエッジタイプの数に制限はありません。

グラフの作成

次に、CREATE GRAPHコマンドを使用して、socialという名前のグラフを作ります。グラフに含む頂点タイプとエッジタイプのリストを入力するだけで作成されます。

GSQLコマンド
CREATE GRAPH social (person, friendship)

GSQLは数秒後に最初のグラフの作成を確認し、作成中にカタログ情報をGSE、GPE、RESTPPなどのすべてのサービスにプッシュします。

GSQLシェル
GSQL > CREATE GRAPH social (person, friendship)

Restarting gse gpe restpp ...

Finish restarting services in 16.554 seconds!
The graph social is created.

ここまでにpersonという頂点タイプ、friendshipというエッジタイプ、それらを含むsocialというグラフが作成されました。これで最初のグラフスキーマの作成が完了しました。では、カタログに何が入っているか、GSQLシェルで ls コマンドを入力して見てみましょう。

GSQLシェル
GSQL > ls
---- Global vertices, edges, and all graphs
Vertex Types:
  - VERTEX person(PRIMARY_ID name STRING, name STRING, age INT, gender STRING, state STRING) WITH STATS="OUTDEGREE_BY_EDGETYPE"
Edge Types:
  - UNDIRECTED EDGE friendship(FROM person, TO person, connect_day DATETIME)

Graphs:
  - Graph social(person:v, friendship:e)
Jobs:


Json API version: v2