テキスト・データの読み込み
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')
頂点ラベル
author
とbook
の両方にプロパティ・キーname
が使用されるため、authorBook
ファイルでは、著者名と本の名前に変数aname
とbname
がそれぞれ使用されます。これらの変数は、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
を使用する必要があります。