JSONデータの読み込み
DSE Graph Loaderを使用してJSONデータを読み込む方法。
グラフ・データの読み込みによく使用されるファイル形式はJSONです。入力JSONファイルには、すべてのキーと値に関する情報がネストされた構造で保持されます。
複数の異なるJSONファイルのマッピング
DSE Graph Loaderによる複数の異なるJSONファイルのマッピング。
SAMPLE INPUT
// For the author.json file:
{"author_name":"Julia Child","gender":"F"}
// For the book.json file:
{"name":"The Art of French Cooking, Vol. 1","year":"1961","ISBN":"none"}
// For the authorBook.json file:
{"name":"The Art of French Cooking, Vol. 1","author":"Julia Child"}
頂点ラベルauthor
とbook
の両方にプロパティ・キーname
が使用されるため、authorBook
ファイルでは、著者名と本の名前に変数aname
とbname
がそれぞれ使用されます。これらの変数は、author
頂点とbook
頂点の間にエッジを作成するために使用されるマッピング・ロジックで使用されます。手順
- 必要に応じて、マッピング・スクリプトに構成を追加します。
-
データ入力ファイルを指定します。変数
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/JSON/' authorInput = File.json(inputfiledir + 'author.json') bookInput = File.json(inputfiledir + 'book.json') authorBookInput = File.json(inputfiledir + 'authorBook.json')
-
各行で、ファイルを
json
ファイルとして指定し、ファイル名を指定します。File.json
のJSON形式は、1行に1つのJSONオブジェクトです。データの処理に使用されるマップ、authorInput
が作成されます。マップは変換を使用することで、読み込み前に操作することができます。authorInput = File.json(inputfiledir + 'author.json')
- マッピング・スクリプトの本文を作成します。マッピング・スクリプトのこの部分は、ファイル形式に関係なく同じです。
-
JSONの読み込みに、DSE Graph Loaderをdry runとして実行するには、次のコマンドを使用します。
$ graphloader authorBookMappingJSON.groovy -graph testJSON -address localhost -dryrun true
テスト目的の場合、
graphloader
の実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloader
を使用する必要があります。
例
/* SAMPLE INPUT
author: {"name":"Julia Child","gender":"F"}
book : {"name":"The Art of French Cooking, Vol. 1","year":"1961","ISBN":"none"}
authorBook: {"bname":"The Art of French Cooking, Vol. 1","aname":"Julia Child"}
*/
// 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/JSON/'
authorInput = File.json(inputfiledir + 'author.json')
bookInput = File.json(inputfiledir + 'book.json')
authorBookInput = File.json(inputfiledir + 'authorBook.json')
//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"
}
}
形式が同じ複数のファイルのディレクトリーからのマッピング
形式が同じ複数のJSONファイルのDSE Graph Loaderでのマッピング。
SAMPLE INPUT
// For the author.json file:
{"author_name":"Julia Child","gender":"F"}
// For the book.json file:
{"name":"The Art of French Cooking, Vol. 1","year":"1961","ISBN":"none"}
// For the authorBook.json file:
{"name":"The Art of French Cooking, Vol. 1","author":"Julia Child"}
同じ形式の多数のファイルがディレクトリーに存在します。ファイルが異なる場合、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) //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) personEdgeInput = File.directory(edgefiledir) //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" } }
-
JSONの読み込みにディレクトリーからDSE Graph Loaderを実行するには、以下のコマンドを使用します。
$ graphloader dirSourceJSONMapping.groovy -graph testdirSource -address localhost
テスト目的の場合、
graphloader
の実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloader
を使用する必要があります。
ファイル・パターンを使用したディレクトリーからのファイルのマッピング
形式が同じ複数のCSVファイルのDSE Graph Loaderでのマッピング。
$ ls data badOne.csv person1.csv person2.csv同じ形式の多数のファイルがディレクトリーに存在します。ファイルが異なる場合、DSE Graph Loaderはマップ・スクリプト内のパターンと一致するファイルのみを読み込みます。
パターン | 説明 | 例 |
---|---|---|
* | ゼロ以上の文字と一致します。マッチング中は、ディレクトリー境界を超えません。 | *.csvの場合、csvで終わるすべてのCSVファイルと一致します。 |
** | *と同じですが、ディレクトリー境界を超えます。 | 複数のディレクトリー内のCSVファイル。 |
? | 1つの文字だけ一致します。 | person?.csvの場合、person1.csvまたはpersonA.csvの名前が付いたすべてのCSVファイルに一致しますが、person11.csvは一致しません。 |
\ | 特殊文字として解釈される文字を回避します。例:\\ to get a single \。 | |
[ ] | 指定された文字のセットに一致しますが、単一の文字が一致する場合に限ります。 | [efg]は、「e」、「f」、または「g」に一致するため、person[efg]は、persone、personf、またはpersongに一致します。[1-9]は任意の1つの数字に一致します。person[1-9]では、person1.csvからperson9.csvまでのファイルを取得します。 |
{ } | サブパターンのグループに一致します。 | {csv,json}では、ディレクトリー内のすべてのCSVファイルとJSONファイルに一致します。 |
手順
- 必要に応じて、マッピング・スクリプトに構成を追加します。
-
サンプル入力ファイル:
/* SAMPLE CSV INPUT: id|name|gender 001|Julia Child|F */
-
データ入力ディレクトリーを指定します。変数
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/filePattern' inputfileCSV = inputfiledir+'/data' personInput = File.directory(inputfileCSV).fileMatches("person*.csv").delimiter('|').header('id','name','gender') //Specifies what data source to load using which mapper (as defined inline) load(personInput).asVertices { label "person" key "name" } /* RESULT: person1.csv and person2.csv will be loaded, but not badOne.csv */
重要な要素は
fileMatches("person*.csv")
です。これは、読み込まれるファイルに一致するパターンを定義します。ファイルbadOne.csvは、パターンが一致しないため読み込まれません。ファイルpersonExtra.csvも、パターンが一致するため読み込まれることに注意してください。person*.csvをperson*.jsonに置き換え、JSON入力ファイル・パラメーターを使用することで、JSON入力ファイルにも同じパターン・マッチングを使用できます。
-
CSVの読み込みに、DSE Graph Loaderをディレクトリーから実行するには、次のコマンドを使用します。
$ graphloader filePatternCSV.groovy -graph testPattCSV -address localhost
テスト目的の場合、
graphloader
の実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloader
を使用する必要があります。
- 必要に応じて、マッピング・スクリプトに構成を追加します。
-
サンプル入力ファイル:
/* SAMPLE CSV INPUT: id|name|gender 001|Julia Child|F */
-
データ入力ディレクトリーを指定します。変数
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/filePattern' inputfileCSV = inputfiledir+'/data' personInput = File.directory(inputfileCSV).fileMatches("person[1-9].csv").delimiter('|').header('id','name','gender') //Specifies what data source to load using which mapper (as defined inline) load(personInput).asVertices { label "person" key "name" } /* RESULT: person1.csv and person2.csv will be loaded, but not badOne.csv */
重要な要素は
fileMatches("person[1-9].csv")
です。これは、読み込まれるファイルに一致するパターンを定義します。person1.csvからperson9.csvまでのすべてのファイルが読み込まれますが、person15.csvはパターンと一致しないため、badOne.csvと同様に読み込まれません。fileMatches("person?.csv")
でも同じ結果になります。person[1-9].csvをperson[1-9].jsonに置き換え、JSON入力ファイル・パラメーターを使用することで、JSON入力ファイルにも同じパターン・マッチングを使用できます。
-
この例でDSE Graph Loaderを実行するには、次のコマンドを使用します。
$ graphloader filePatternRANGE.groovy -graph testPattRANGE -address localhost
テスト目的の場合、
graphloader
の実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloader
を使用する必要があります。
- 必要に応じて、マッピング・スクリプトに構成を追加します。
-
サンプル入力ファイル:
/* SAMPLE CSV INPUT: id|name|gender 001|Julia Child|F */
-
データ入力ディレクトリーを指定します。変数
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/filePattern/data' personInput = File.directory(inputfiledir).fileMatches("{person*,badOne}.csv").delimiter('|').header('id','name','gender') //Specifies what data source to load using which mapper (as defined inline) load(personInput).asVertices { label "person" key "name" } /* RESULT: person1.csv, person2.csv and badOne.csv will all be loaded */
重要な要素は
fileMatches("{person*,badOne}.csv")
です。これは、読み込まれるファイルに一致するパターンを定義します。ファイルperson1.csv、person1.csv、およびbadOne.csvは、パターンが3つのファイルすべてで一致するため読み込まれます。person*.csvをperson*.jsonに置き換え、JSON入力ファイル・パラメーターを使用することで、JSON入力ファイルにも同じパターン・マッチングを使用できます。 -
次のコマンドを使用して、この例についてDSE Graph Loaderを実行します。
$ graphloader filePatternMULT.groovy -graph testPattMULT -address localhost
テスト目的の場合、
graphloader
の実行前に、指定されたグラフが存在する必要はありません。ただし、実稼働アプリケーションの場合は、グラフとスキーマを作成してから、graphloader
を使用する必要があります。