4.5 SQLプロパティ・グラフでのJSONのサポート
SQLプロパティ・グラフを作成する場合は、簡易ドット表記法を使用して、JSONデータ型列に対してラベル・プロパティを定義できます。後でSQLグラフ問合せ内でこのプロパティにアクセスできます。
VARCHAR
NUMBER
BINARY_FLOAT
BINARY_DOUBLE
DATE
TIMESTAMP
-
.string()
、.number()
、.float()
、.double()
、.date()
、.timestamp()
、.binary()
またはJSON_VALUE
演算子を使用してSQLデータ型に変換された未加工のJSONデータ
したがって、JSONドット表記法またはJSON_VALUE
演算子を使用して、JSONデータ内のスカラー値を選択し、SQLプロパティ・グラフ・ラベル・プロパティを定義できます。これは、SQLグラフ問合せ内のJSONデータ型列に対して定義されたラベル・プロパティにアクセスする場合にも適用されます。
例4-5 ラベル・プロパティのJSONドット表記法およびJSON式を使用したSQLプロパティ・グラフの定義
次の例では、JSONデータ型列に対して定義されたラベル・プロパティを含むSQLプロパティ・グラフを作成します。グラフは、「データベースでのサンプル・データの設定」で定義されているサンプル・データベース表(persons
およびfriendships
)を使用して作成されます。この例では、JSONドット表記法とJSON_VALUE
式の両方を使用して、ラベル・プロパティを定義します。
CREATE PROPERTY GRAPH friends_graph
VERTEX TABLES (
persons AS p KEY (person_id)
LABEL person
PROPERTIES (name, birthdate AS dob,
p.hr_data.department.string() AS "works_in",
JSON_VALUE(person_data, '$.role') AS "works_as")
)
EDGE TABLES (
friends
KEY (friendship_id)
SOURCE KEY (person_a) REFERENCES p(person_id)
DESTINATION KEY (person_b) REFERENCES p(person_id)
PROPERTIES (meeting_date)
);
グラフが正常に作成され、次の例に示すようにグラフを問い合せることができます:
例4-6 SQLプロパティ・グラフの問合せおよびSQL/JSON式として定義されたラベル・プロパティへのアクセス
次の例では、前の例で作成したSQLプロパティ・グラフを問い合せて、JSONデータ型列に対して作成されたラベル・プロパティにアクセスします。
SELECT * FROM GRAPH_TABLE (friends_graph
MATCH
(a IS person) -[e IS friends]-> (b IS person)
COLUMNS (a.name AS a,
a."works_in" AS "a_works_in",
e.meeting_date,
b.name AS b)
);
問合せの出力は次のようになります。
A a_works_in MEETING_D B
----- ---------- --------- -----
John IT 01-SEP-00 Bob
Mary HR 19-SEP-00 Alice
Mary HR 19-SEP-00 John
Bob IT 10-JUL-01 Mary
例4-7 JSONデータ型のラベル・プロパティを使用したSQLプロパティ・グラフの作成および問合せ
次の例では、JSONデータ型のラベル・プロパティを使用してSQLプロパティ・グラフを作成します:
CREATE PROPERTY GRAPH friends_graph_new
VERTEX TABLES (
persons AS p KEY (person_id)
LABEL person
PROPERTIES (name, birthdate AS dob, p.hr_data AS "p_data")
)
EDGE TABLES (
friends
KEY (friendship_id)
SOURCE KEY (person_a) REFERENCES p(person_id)
DESTINATION KEY (person_b) REFERENCES p(person_id)
PROPERTIES (meeting_date)
);
その後、次のようにJSON_VALUE
式を使用してグラフを問い合せることができます:
SELECT * FROM GRAPH_TABLE (friends_graph_new
MATCH
(a IS person WHERE JSON_VALUE(a."p_data", '$.department') = 'IT') -[e]-> (b)
COLUMNS (a.name AS a,
a."p_data".department.string() AS "a_works_in",
a."p_data".role.string() AS "a_works_as",
e.meeting_date,
b.name AS b)
);
A a_works_in a_works_as MEETING_D B
----- ---------- -------------------- --------- -----
John IT Software Developer 01-SEP-00 Bob
Bob IT Technical Consultant 10-JUL-01 Mary
親トピック: プロパティ・グラフのSQL DDL文