9.2 GraphSONファイルのインポートによるPGQLプロパティ・グラフの作成

GraphImporterBuilder APIを使用すると、GraphSONファイルからグラフ・データをインポートすることで、PGQLプロパティ・グラフを作成できます。

このインポート機能は、次のステップで構成されています:
  1. データ構造に対するGraphSONの解析。
  2. データ構造からのSQL表の作成とデータの挿入。
  3. CREATE PROPERTY GRAPH文の生成および実行。

次の例に、GraphImporterBuilder APIを使用してGraphSONファイルからPGQLプロパティ・グラフを作成する方法を示します。

opg4j> import oracle.pg.imports.*
opg4j> var importer = new GraphImporter.Builder().
...>     setFilePath("<path_to_graphson_file>").
...>     setBatchSize(2).
...>     setInputFormat(GraphImportInputFormat.GRAPHSON).
...>     setOutputFormat(GraphImportOutputFormat.PG_PGQL).
...>     setThreads(4).
...>     setDbJdbcUrl("<jdbc_url>").
...>     setDbUsername("<username>").
...>     setDbPassword("<password>").
...>     setGraphName("mygraph").
...>     build()
importer ==> oracle.pg.imports.GraphImporter@5d957cf0
opg4j> var ddl = importer.importGraph()
import oracle.pg.imports.*;
GraphImporter importer = new GraphImporter.Builder()
     .setFilePath("<path_to_graphson_file>")
     .setBatchSize(2)
     .setInputFormat(GraphImportInputFormat.GRAPHSON)
     .setOutputFormat(GraphImportOutputFormat.PG_PGQL)
     .setThreads(4)
     .setDbJdbcUrl("<jdbc_url>")
     .setDbUsername("<username>")
     .setDbPassword("<password>")
     .setGraphName("mygraph")
     .build();
>>> from opg4py.graph_importer import GraphImporter
>>> config = {
...       'jdbc_url'     : '<jdbc_url>',
...       'username'     : '<username>',
...       'password'     : '<password>',
...       'file_path'    : '<path_to_graphson_file>',
...       'graph_name'   : 'mygraph',
...       'output_format': 'pg_pgql',
...       'input_format' : 'graphson'
... }
>>> importer = GraphImporter(config)
>>> importer.import_graph()

前述の例では、データベースに必要なSQL表を設定し、DDL文を生成および実行してmygraphを作成しています。たとえば、この例では、次のCREATE PROPERTY GRAPH DDL文を生成します:

"CREATE PROPERTY GRAPH mygraph 
   VERTEX TABLES ( 
     software 
       KEY (id) 
       LABEL software 
       PROPERTIES ARE ALL COLUMNS, 
     person 
       KEY (id) 
       LABEL person 
       PROPERTIES ARE ALL COLUMNS 
   ) 
   EDGE TABLES ( 
     created 
       KEY (id) 
       SOURCE KEY (sid) REFERENCES person (id) 
       DESTINATION KEY (did) REFERENCES software (id) 
       LABEL created 
       PROPERTIES ARE ALL COLUMNS, 
     knows 
       KEY (id) 
       SOURCE KEY (sid) REFERENCES person (id) 
       DESTINATION KEY (did) REFERENCES person (id) 
       LABEL knows 
       PROPERTIES ARE ALL COLUMNS 
   ) OPTIONS ( PG_PGQL )"

あるいは、次の例に示すように、データ・ソースを使用してデータベースに接続することで、データベースへの接続を作成することもできます。

opg4j> import oracle.pg.imports.*
opg4j> import oracle.jdbc.pool.OracleDataSource

opg4j> var ds = new OracleDataSource() // setup the data source
ds ==> oracle.jdbc.pool.OracleDataSource@4154ecd3
ds.setURL("<jdbc_url>")
ds.setUser("<username>")
ds.setPassword("<password>")

opg4j> var importer = new GraphImporter.Builder().
...>     setFilePath("<path_to_graphson_file>").
...>     setBatchSize(2).
...>     setInputFormat(GraphImportInputFormat.GRAPHSON).
...>     setOutputFormat(GraphImportOutputFormat.PG_PGQL).
...>     setThreads(4).
...>     setDataSource(ds).
...>     setGraphName("mygraph").
...>     build()
importer ==> oracle.pg.imports.GraphImporter@5d957cf0
opg4j> var ddl = importer.importGraph()
import oracle.pg.imports.*;
import oracle.jdbc.pool.OracleDataSource;
//Setup the datasource
var ds = new OracleDataSource();
ds.setURL(<jdbc_url>)
ds.setUser(<username>);
ds.setPassword(<password>);
//Setup the GraphImporter
GraphImporter importer = new GraphImporter.Builder()
     .setFilePath("<path_to_graphson_file>")
     .setBatchSize(2)
     .setInputFormat(GraphImportInputFormat.GRAPHSON)
     .setOutputFormat(GraphImportOutputFormat.PG_PGQL)
     .setThreads(4)
     .setDataSource(ds)
     .setGraphName("mygraph")
     .build();
var ddl = importer.importGraph();

また、次の点にも注意してください。

  • GraphImporterBuilder APIは、GraphSONファイル形式バージョン3.0のみをサポートしています。
  • 表9-7に示されているGraphSONデータ型のみがサポートされています。

次の各項では、GraphImporterのパラメータおよびGraphSONとOracle Databaseの間のデータ型マッピングについて詳しく説明します。

9.2.1 GraphImporterのパラメータの追加情報

GraphImporterで使用されるパラメータの詳細について学習します。

表9-3 データベース接続のパラメータ

パラメータ 説明 APIのsetter デフォルト値 オプション
dataSource データベース用のデータ・ソース setDataSource NULL dbJdbcUrldbUsernameおよびdbPasswordを渡す場合のみ
dbJdbcUrl データベースのJDBC URL setDbJdbcUrl "" dataSouceを渡す場合のみ
dbPassword データベースのパスワード setDbPassword "" dataSouceを渡す場合のみ
dbUsername データベースのユーザー名 setDbUsername "" dataSouceを渡す場合のみ

表9-4 GraphImporterの構成パラメータ

パラメータ 説明 APIのsetter デフォルト値 オプション
pathName GraphSONファイルへのパス setPathname "" いいえ
graphName 結果として生成されるグラフ名 setGraphName "" はい
inFormat インポータの入力書式 setInputFormat GraphImportInputFormat.GRAPHSON はい
outFormat インポータの出力書式 setOutputFormat GraphImportOutputFormat.PG_PGQL はい
batchSize データベースにデータを挿入する前に読み取られた行の数 setBatchSize 1000 はい
threads データベースへの挿入に使用されるスレッドの数 setThreads 1 はい

表9-5 SQL Storageのパラメータ

パラメータ 説明 APIのsetter デフォルト値 オプション
stringFieldSize GraphSON Stringデータ型は、データベースではVARCHAR2として変換されます。

このパラメータは、データ・ストレージのVARCHAR2サイズを表します。

setStringFieldsSize 100 はい
fractionalSecondsPrecision Oracle DatabaseのTIMESTAMPデータ型で検出される小数秒の精度パラメータ。 setFractionalSecondsPrecision 6 はい

表9-6 PGQLでサポートされているパラメータ

パラメータ 説明 APIのsetter デフォルト値 オプション
parallel 問合せおよび更新操作に使用する並列度 setPathname 0 はい
dynamicSampling 動的サンプリング値 setGraphName 2 はい
matchOptions 問合せの変換および実行に影響を与えるために使用される追加オプション setMatchOptions NULL はい
options 変更の変換および実行に影響を与えるために使用される追加オプション setOptions NULL はい

9.2.2 GraphSONの型からOracle Databaseのデータ型へのマッピング

GraphSONのデータ型は、対応するOracle Databaseのデータ型にマップできます。

次の表に、Oracle Databaseのデータ型へのGraphSONのデータ型のマッピングを示します。

表9-7 GraphSONの型からOracle Databaseの型へのマッピング

GraphSONの型 Oracle Databaseの型
String VARCHAR2脚注1
g:Int32 NUMBER(10)
g:Int64 NUMBER(10)
g:Float FLOAT
g:Double FLOAT
g:Date DATE
g:Timestamp TIMESTAMP脚注2
g:UUID CHAR(36)

脚注1 stringFieldSizeパラメータを使用して、データベースがString列に格納する文字列サイズを決定できます。

脚注2 fractionalSecondsPrecisionパラメータを使用して、Timestamp型の列の精度を指定できます。