日時スキーマ
DSE Graphの日時スキーマの作成方法。
日付と時刻は、頂点プロパティとエッジ・プロパティの両方で一般的に使用される2つのデータ型です。
手順
スキーマの作成とデータの読み込み
-
次のプロパティをグラフで作成します。
// SCHEMA FOR DATE AND TIME PROPERTIES schema.propertyKey('year').Date().ifNotExists().create() schema.propertyKey('time').Time().ifNotExists().create()
-
下記のクエリーの例では、追加のスキーマが必要となります。
この例では、personの生年月日と出生時刻を識別するエッジ・ラベルbornのdateおよびtimeプロパティを使用します。// OTHER PROPERTIES schema.propertyKey('name').Text().ifNotExists().create() schema.propertyKey('gender').Text().ifNotExists().create()// VERTEX LABELS schema.vertexLabel('person').properties('name', 'gender').ifNotExists().create() // EDGE LABELS schema.edgeLabel('born').multiple().connection('person','person').ifNotExists().create() schema.edgeLabel('born').properties('year','time').add() // INDEXES schema.vertexLabel('person').index('byName').materialized().by('name').add()
-
次のデータがDSE Graph Loaderを使用して挿入されます。
各人物のCSVファイルは次のようになります。
エッジのCSVファイルは次のようになります。name|gender Julia Child|F JCMom|F Simone Beck|F SBMom|F Louisette Bertholie|F LBMom|F
スキーマがグラフで作成された後で、マッピング・スクリプトによって各ファイルが読み込まれます。pname1|pname2|year|time Julia Child|JCMom|1930-01-01|10:00:00.000 Simone Beck|SBMom|1940-01-01|12:00:00.000 Louise Bertholie|LBMom|1950-01-01|13:00:00.000
/* SAMPLE INPUT person: Julia Child|F personEdges: Julia Child|JCMom|1930-01-01|10:00 */ // CONFIGURATION // Configures the data loader to create the schema config dryrun: false, preparation: true, create_schema: false, load_new: true, schema_output: 'loader_output.txt' // DATA INPUT // Define the data input source (a file which can be specified via command line arguments) // inputfiledir is the directory for the input files inputfiledir = '/tmp/dateTime/' personInput = File.csv(inputfiledir + "person.csv").delimiter('|') personEdgeInput = File.csv(inputfiledir + "personEdges.csv").delimiter('|') //Specifies what data source to load using which mapper (as defined inline) load(personInput).asVertices { label "person" key "name" } load(personEdgeInput).asEdges { label "born" outV "pname1", { label "person" key "name" } inV "pname2", { label "person" key "name" } }
日時データのクエリー
-
生年月日が1940-01-01より前のbornエッジをすべて見つけます。
このクエリーでは、ラベルpersonを持つすべての頂点が検索された後で、ラベルbornを持つ外向き頂点が探索され、// Find all edges that have a birthdate earlier than 1940-01-01 g.V().hasLabel('person').outE('born').has('year',lt('1940-01-01')).valueMap()
lt('1940-01-01')
という制限を満たしていることが判明したすべてのエッジが除外されます。{year=1930-01-01, time=10:00}
-
生年月日が1940-01-01より前である各子とその親の名前を一覧にします。
このクエリーでは、ラベルpersonを持つすべての頂点が検索され、childとして一時的に保存された後で、ラベルbornを持つ外向き頂点が探索され、この前のクエリーと同様に、g.V().hasLabel('person').as('child'). outE('born').has('year',lt('1940-01-01')).inV().as('parent'). select('child','parent'). by('name'). by('name')
lt('1940-01-01')
という制限を満たしていることが判明したすべてのエッジが除外されます。さらに、内向き頂点がすべて検索され、parentとして一時的に保存された後で、select()
メソッドを使用して2つの保存済み項目が選択されます(いずれの場合も名前で選択)。{child=Julia Child, parent=JCMom}