JDBC互換データベースからのデータの読み込み
DSE Graph Loaderを使用してJDBC互換データベースからデータを読み込む方法。
JDBC互換データベースから読み込むためのデータ・マッピング・スクリプトを説明付きで示します。スクリプト全文は、ページの最後にあります。
注: DSE Graph Loaderを使用してJDBC互換データベースから直接読み込むのは便利ですが、大規模なデータベースでは非常に時間がかかります。最初に小さなデータセットをテストし、大規模なデータセットを移動するのに必要な時間を考慮して、この方法が効率的かどうかを確認します。
手順
- 必要に応じて、マッピング・スクリプトに構成を追加します。
-
読み込み対象のデータのサンプルは以下のようになります。
SAMPLE INPUT // For the author data: name:Julia Child gender:F // For the book data: name:Simca's Cuisine: 100 Classic French Recipes for Every Occasion year:1972 ISBN:0-394-40152-2 // For the authorBook data: bname:Simca's Cuisine: 100 Classic French Recipes for Every Occasion aname:Simone Beck
頂点ラベル
author
とbook
の両方にプロパティ・キーname
が使用されるため、authorBook
ファイルでは、著者名と本の名前に変数aname
とbname
がそれぞれ使用されます。これらの変数は、author
頂点とbook
頂点の間にエッジを作成するために使用されるマッピング・ロジックで使用されます。 -
一部のデータベースでは、
graphloader
スクリプトと同じディレクトリーにドライバーがインストールされている必要があります。MySQLを使用した次の例では、ドライバーをダウンロードできます。ファイルを解凍し、mysql-connector-java-5.1.44-bin.jarファイルを正しいディレクトリーにコピーします。他のデータベースでも同じようにダウンロードが必要です。 -
JDBC情報でデータ入力データベースを指定します。変数
inputDatabase
によって、データ入力データベースが指定されます。この例ではMySQLデータベースを使用していますが、JDBC準拠データベース(H2、MySQL、Postgres、Oracle)であればどのデータベースでも使用できます。connection
、localhost
、およびMySQLデータベースsample
がすべて指定されます。さらに、user
およびpassword
が定義されます。MySQL()
ステップでは、MySQLデータベースへのデータ接続を表します。接続によって、リモート・マシンのアドレスを定義することもできます。// DATA INPUT // Define the data input source (a database connection and SQL statements for data selection) // inputDatabase is the database name inputDatabase = 'localhost/sample' db = Database.connection('jdbc:mysql://' + inputDatabase).user('root').password('foo').MySQL() // Define multiple data inputs from the database source via SQL queries authorInput = db.query "select * from author"; bookInput = db.query "select * from book"; authorBookInput = db.query "select * from authorbook";
注: H2からデータを読み込むには、接続ラインを以下のように定義できます。
Postgresの場合はinputDatabase = '~/test' db = Database.connection("jdbc:h2:" + inputDatabase).H2().user("sa")
Postgre()
を使用し、Oracleの場合はOracle()
を使用します。 -
各行で、データを取得するために使用されるデータベース・クエリーが指定されます。データの処理に使用されるマップ、
authorInput
が作成されます。マップは変換を使用することで、読み込み前に操作することができます。authorInput = db.query "SELECT * FROM AUTHOR";
重要: DSE Graph Loaderは、データベースからすべてのカラム名を小文字で取得します。読み取りエラーを防ぐために、対応する小文字の名前でグラフ・スキーマを作成します。 - マッピング・スクリプトの本文を作成します。マッピング・スクリプトのこの部分は、ファイル形式に関係なく同じです。
-
テキストの読み込みに、DSE Graph Loaderをdry runとして実行するには、次のコマンドを使用します。
graphloader authorBookMappingJDBC.groovy -graph testJDBC -address localhost -dryrun true
テスト目的の場合、
graphloader
の実行前に、指定されたグラフが存在する必要はありません。ただし、プロダクション・アプリケーションの場合は、グラフとスキーマを作成してから、graphloader
を使用する必要があります。 -
読み込みスクリプトの全文は次のようになります。
/* SAMPLE INPUT author: name:Julia Child gender:F book: name:Simca's Cuisine: 100 Classic French Recipes for Every Occasion year:1972 ISBN:0-394-40152-2 authorBook: bname:Simca's Cuisine: 100 Classic French Recipes for Every Occasion aname: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 database connection and SQL statements for data selection) inputDatabase = 'localhost/sample' db = Database.connection('jdbc:mysql://' + inputDatabase).user('root').password('foo').MySQL() // Define multiple data inputs from the database source via SQL queries authorInput = db.query "select * from author"; bookInput = db.query "select * from book"; authorBookInput = db.query "select * from authorbook"; //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" } }