テキスト・データの読み込み

DSE Graph Loaderを使用して区切りテキスト・データを読み込む方法。

区切りテキスト・データのデータ・マッピング・スクリプトを説明付きで示します。スクリプト全文は、ページの最後にあります。

手順

  • 必要に応じて、マッピング・スクリプトに構成を追加します。
  • 読み込み対象のデータのサンプルは以下のようになります。
    SAMPLE INPUT
    // For the author.dat file: 
    Julia Child|F
    // For the book.dat file:
    Simca's Cuisine: 100 Classic French Recipes for Every Occasion|1972|0-394-40152-2
    // For the authorBook.dat file: 
    Simca's Cuisine: 100 Classic French Recipes for Every Occasion|Simone Beck
  • データ入力ファイルを指定します。変数inputfiledirは、入力ファイルのディレクトリー名を指定します。識別された各ファイルは、読み込みで使用されます。
    // 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/TEXT/'
    authorInput = File.text(inputfiledir + "author.dat").
        delimiter("|").
        header('name', 'gender')
    bookInput = File.text(inputfiledir + "book.dat").
        delimiter("|").
        header('name', 'year', 'ISBN')
    authorBookInput = File.text(inputfiledir + "authorBook.dat").
        delimiter("|").
        header('bname', 'aname')

    頂点ラベルauthorbookの両方にプロパティ・キーnameが使用されるため、authorBookファイルでは、著者名と本の名前に変数anamebnameがそれぞれ使用されます。これらの変数は、author頂点とbook頂点の間にエッジを作成するために使用されるマッピング・ロジックで使用されます。

  • 各行で、ファイルをtextファイルとして指定し、ファイル名を指定して、区切り文字を設定し、ヘッダーを指定して読み取り対象のフィールドを識別することができます。また、ヘッダーはデータ・ファイルの最初の行で指定することもできます。データの処理に使用されるマップ、authorInputが作成されます。マップは変換を使用することで、読み込み前に操作することができます。
    authorInput = File.text(inputfiledir + "author.dat").delimiter("|").header('name', 'gender')
    
    header()がマッピング・スクリプトで使用され、ヘッダー行がデータ・ファイルで使用されている場合は、両方が一致する必要があります。データ・ファイルのヘッダー行またはheader()のいずれかが必要です。
  • マッピング・スクリプトの本文を作成します。マッピング・スクリプトのこの部分は、ファイル形式に関係なく同じです。
  • テキストの読み込みに、DSE Graph Loaderをdry runとして実行するには、次のコマンドを使用します。
    $ graphloader authorBookMappingTEXT.groovy -graph testTEXT -address localhost -dryrun true

    テスト目的の場合、graphloaderの実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloaderを使用する必要があります。

  • 読み込みスクリプトの全文は次のようになります。
    /** SAMPLE INPUT
    author: Julia Child|F
    book : Simca's Cuisine: 100 Classic French Recipes for Every Occasion|1972|0-394-40152-2
    authorBook: Simca's Cuisine: 100 Classic French Recipes for Every Occasion|Simone Beck
     */
    
    // CONFIGURATION
    // Configures the data loader to create the schema
    config create_schema: true, load_new: true, load_vertex_threads: 3
    
    // 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 that is given in the commandline
    // as the "-filename" option
    
    inputfiledir = '/tmp/CSV/'
    authorInput = File.text(inputfiledir + "author.dat").
        delimiter("|").
        header('name', 'gender')
    bookInput = File.text(inputfiledir + "book.dat").
        delimiter("|").
        header('name', 'year', 'ISBN')
    authorBookInput = File.text(inputfiledir + "authorBook.dat").
        delimiter("|").
        header('bname', 'aname')
    
    //Specifies what data source to load using which mapper (as defined inline)
      
    load(authorInput).asVertices {
        label "author"
        key "name"
    }
    
    load(bookInput).asVertices {
        label "book"
        key "name"
    }
    
    load(authorBookInput).asEdges {
        label "authored"
        outV "aname", {
            label "author"
            key "name"
        }
        inV "bname", {
            label "book"
            key "name"
        }
    }
形式が同じ複数のファイルのディレクトリーからのマッピング
  • 読み込み対象のデータのサンプルは以下のようになります。
    SAMPLE INPUT
    // For the author.text file:
    name|gender 
    Julia Child|F
    Simone Beck|F
    
    // For the knows.text file:
    aname|bname
    Julia Child|James Beard
    同じ形式の多数のファイルがディレクトリーに存在します。ファイルが異なる場合、graphloaderはエラーを出して停止します。
    java.lang.IllegalArgumentException: /tmp/dirSource/data has more than 1 input type.
  • データ入力ディレクトリーを指定します。変数inputfiledirは、入力ファイルのディレクトリーを指定します。識別された各ファイルは、読み込みで使用されます。
    // 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/dirSource/data'
    personInput = File.directory(inputfiledir).delimiter('|').header('name','gender')
    
    //Specifies what data source to load using which mapper (as defined inline)
    
    load(personInput).asVertices {
        label "author"
        key "name"
    }

    重要な要素はFile.directory()です。これによって、ファイルを格納するディレクトリーが定義されます。

  • 2つのディレクトリーを使用して、頂点とエッジを読み込むことができます。
    // 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/dirSource/data'
    vertexfiledir = inputfiledir+'/vertices'
    edgefiledir = inputfiledir+'/edges'
    personInput = File.directory(vertexfiledir).delimiter('|').header('name','gender')
    personEdgeInput = File.directory(edgefiledir).delimiter('|').header('aname','bname')
    
    //Specifies what data source to load using which mapper (as defined inline)
    
    load(personInput).asVertices {
        label "author"
        key "name"
    }
    
    load(personEdgeInput).asEdges {
        label "knows"
        outV "aname", {
            label "author"
            key "name"
        }
        inV "bname", {
            label "book"
            key "name"
        }
    }
  • テキスト・ファイルの読み込みにDSE Graph Loaderをディレクトリーから実行するには、以下のコマンドを使用します。
    $ graphloader dirSourceMapping.groovy -graph testdirSource -address localhost

    テスト目的の場合、graphloaderの実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloaderを使用する必要があります。