Gryoデータの読み込み
DSE Graph Loaderを使用してGryoデータを読み込む方法。
DSE Graph間でデータのインポートおよびエクスポートを行うための1つのファイル形式が、バイナリー・ファイル形式のGryoです。GryoはKryoのGremlinバリアントで、Java用の高速で効率の良いオブジェクト・グラフ・シリアライゼーション・フレームワークです。
Gryoデータのデータ・マッピング・スクリプトを説明付きで示します。スクリプト全文は、ページの最後にあります。
注: DSE Graph Loaderでは、DSE GraphまたはTinkerGraphで生成されたGryoファイル、すなわち、Apache TinkerPopに含まれているインメモリー・グラフ・データベースを読み込むことができます。DSE Graphで生成されたGryoファイルは、TinkerGraph Gryoファイルと形式が異なるため、各ソースからデータを読み込むためのマッピング・スクリプトが異なります。
手順
- 必要に応じて、マッピング・スクリプトに構成を追加します。
-
データ入力ファイルを指定します。変数
inputfiledir
は、入力ファイルのディレクトリーを指定します。指定されたファイルは、読み込みで使用されます。
Gryo入力ファイルがDSE Graphから生成される場合、追加手順// DATA INPUT // Define the data input source // inputfiledir is the directory for the input files inputfiledir = '/tmp/Gryo/' recipeInput = Graph.file(inputfiledir + 'recipe.gryo').gryo()
dse()
によって、入力データをストリーミングできるため、大きなファイルの転送が容易になります。// DATA INPUT // Define the data input source // inputfiledir is the directory for the input files inputfiledir = '/tmp/Gryo/' recipeInput = Graph.file(inputfiledir + 'recipe.gryo').gryo().dse()
-
ファイルを
gryo
ファイルとして指定し、追加手順gryo()
によって、このファイルをGryoファイルとして処理する必要があることが識別されます。マップrecipeInput
が作成され、データの処理に使用されます。recipeInput = Graph.file(inputfiledir + 'recipe.gryo')
File.csv
またはFile.json
とは対照的に、Graph.file
が使用されることに注意してください。ヒント:java.io.File
オブジェクトにアクセスする場合は、最初の呼び出しを完全に名前空間で指定します。そうしないと、DSE Graph Loaderによって、ファイル・オブジェクトがオーバーライドされます。currentDir = new java.io.File('.').getCanonicalPath() + '/' source = Graph.file(currentDir + 'myfile.kryo').gryo()
- マッピング・スクリプトの本文を作成します。マッピング・スクリプトのこの部分は、ファイル形式に関係なく同じです。ただし、Gryoファイルではわずかに変更されたバージョンが使用されます。
-
Gryoの読み込みに、DSE Graph Loaderをdry runとして実行するには、次のコマンドを使用します。
$ graphloader recipeMappingGRYO.groovy -graph testGRYO -address localhost -dryrun true
テスト目的の場合、
graphloader
の実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloader
を使用する必要があります。 -
読み込みスクリプトの全文は次のようになります。
/* SAMPLE INPUT Gryo file is a binary file */ // CONFIGURATION // Configures the data loader to create the schema config create_schema: true, load_new: true // DATA INPUT // Define the data input source // inputfiledir is the directory for the input files inputfiledir = '/tmp/GRYO/' recipeInput = Graph.file(inputfiledir + 'recipe.gryo').gryo() load(recipeInput.vertices()).asVertices { labelField "~label" key "~id", "id" } load(recipeInput.edges()).asEdges { labelField "~label" outV "outV", { labelField "~label" key "~id", "id" } inV "inV", { labelField "~label" key "~id", "id" } }