日時スキーマ

DSE Graphの日時スキーマの作成方法。

日付と時刻は、頂点プロパティとエッジ・プロパティの両方で一般的に使用される2つのデータ型です。

手順

スキーマの作成とデータの読み込み

  1. 次のプロパティをグラフで作成します。
    // SCHEMA FOR DATE AND TIME PROPERTIES
    schema.propertyKey('year').Date().ifNotExists().create()
    schema.propertyKey('time').Time().ifNotExists().create()
  2. 下記のクエリーの例では、追加のスキーマが必要となります。
    // 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()
    この例では、personの生年月日と出生時刻を識別するエッジ・ラベルbornのdateおよびtimeプロパティを使用します。
  3. 次のデータがDSE Graph Loaderを使用して挿入されます。
    各人物のCSVファイルは次のようになります。
    name|gender
    Julia Child|F
    JCMom|F
    Simone Beck|F
    SBMom|F
    Louisette Bertholie|F
    LBMom|F
    エッジのCSVファイルは次のようになります。
    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"
        }
    }

日時データのクエリー

  1. 生年月日が1940-01-01より前の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()
    このクエリーでは、ラベルpersonを持つすべての頂点が検索された後で、ラベルbornを持つ外向き頂点が探索され、lt('1940-01-01')という制限を満たしていることが判明したすべてのエッジが除外されます。
    {year=1930-01-01, time=10:00}
  2. 生年月日が1940-01-01より前である各子とその親の名前を一覧にします。
    g.V().hasLabel('person').as('child').
    outE('born').has('year',lt('1940-01-01')).inV().as('parent').
    select('child','parent').
    by('name').
    by('name')
    このクエリーでは、ラベルpersonを持つすべての頂点が検索され、childとして一時的に保存された後で、ラベルbornを持つ外向き頂点が探索され、この前のクエリーと同様に、lt('1940-01-01')という制限を満たしていることが判明したすべてのエッジが除外されます。さらに、内向き頂点がすべて検索され、parentとして一時的に保存された後で、select()メソッドを使用して2つの保存済み項目が選択されます(いずれの場合も名前で選択)。
    {child=Julia Child, parent=JCMom}