データの読み込み
グラフスキーマを作成したら、次に作成したスキーマにデータを読み込みます。実際の作業は、一式のデータファイルにあるフィールドを、先に定義したグラフスキーマの頂点タイプとエッジタイプの属性と関連付ける(マッピングする)方法をGSQLローダーに指示することです。
person.csvとfriendship.csvという2つのデータファイルがローカルディスクにあるはずです。それらのファイルは、同じフォルダにある必要はありません。
GSQLシェルを終了する必要がある場合は、quitと入力します。gsqlと入力すれば、シェルに戻ることができます。
読み込みジョブの定義
次の読み込みのジョブでは、データファイルが /home/tigergraph
のフォルダにあることを前提としています。他の場所にある場合は、次の読み込みジョブスクリプトにある /home/tigergraph/person.csv
と /home/tigergraph/friendship.csv
の部分を、各々実際のファイルパスに置き換えてください。GSQLシェル (に戻って) から操作しているという前提で、次のコマンドを入力します。
USE GRAPH social
BEGIN
CREATE LOADING JOB load_social FOR GRAPH social {
DEFINE FILENAME file1="/home/tigergraph/person.csv";
DEFINE FILENAME file2="/home/tigergraph/friendship.csv";
LOAD file1 TO VERTEX person VALUES ($"name", $"name", $"age", $"gender", $"state") USING header="true", separator=",";
LOAD file2 TO EDGE friendship VALUES ($0, $1, $2) USING header="true", separator=",";
}
END
順を追って、コマンドの説明します。
-
USE GRAPH social
: どのグラフが作業の対象になるかをGSQLに伝えます。 -
BEGIN ... END
: 複数行モードであることを意味します。GSQLシェルは、この2つのマーカーの間にあるものすべてを単独の命令文として取り扱います。このマーカーはインタラクティブモードの場合にのみ必要です。コマンドファイルに格納されているGSQL文を実行する場合には、コマンドのインタプリタ (CLI) がファイル全体を精査するので、BEGINとENDを示唆する必要はありません。 -
CREATE LOADING JOB
: 1つの読み込みジョブは、複数のファイルから複数のグラフオブジェクトに対するマッピングを指示できます。各ファイルは、ファイル名変数に割り当てられている必要があります。フィールドラベルには、名前または位置のいずれかを設定できます。名前によるラベル付けの場合は、ソースファイルにヘッダー行が必要です。位置によるラベル付けの場合には、整数0, 1,… がソースの列の位置を表します。上記の例では、最初のLOAD文はソースファイルの列を名前で参照し、2つ目のLOAD文は、位置で参照しています。次のことに注意してください。-
ファイル1にあるnameという列は、2つのフィールド (personという頂点のPRIMARY_IDと「名前」という属性の両方) にマッピングされます。
-
ファイル1では、性別の次に年齢があります。personの頂点では、性別は年齢の後にきます。読み込みの命令文では、読み込み先のオブジェクト (この例では頂点person) が必要とする順番で属性を入力します。
-
各LOAD文には、必ずUSING句があります。ここでは、両方のファイルにヘッダーが含まれていることをGSQLに伝えています。(名前を使うかどうかに関わらず、GSQLは最初の行が考慮するデータであるかどうかを識別する必要があります。) また、列がカンマによって区切られていることも宣言しています。GSQLは、カンマだけでなく、あらゆる単一文字のセパレーターに対応しています。
-
CREATE LOADING JOBの命令文を実行するときに、GSQLは構文エラーをチェックして、データファイルが指定された場所にあることを確認します。エラーがなければ、ジョブはコンパイルされ保存されます。
GSQL > USE GRAPH social
Using graph 'social'
GSQL > BEGIN
GSQL > CREATE LOADING JOB load_social FOR GRAPH social {
GSQL > DEFINE FILENAME file1="/home/tigergraph/person.csv";
GSQL > DEFINE FILENAME file2="/home/tigergraph/friendship.csv";
GSQL >
GSQL > LOAD file1 TO VERTEX person VALUES ($"name", $"name", $"age", $"gender", $"state") USING header="true", separator=",";
GSQL > LOAD file2 TO EDGE friendship VALUES ($0, $1, $2) USING header="true", separator=",";
GSQL > }
GSQL > END
The job load_social is created.
読み込みジョブの実行
以上で読み込みの準備ができました。読み込みジョブを実行してデータをグラフに読み込ませます。
RUN LOADING JOB load_social
以下が結果です。
GSQL > run loading job load_social
[Tip: Use "CTRL + C" to stop displaying the loading status update, then use "SHOW LOADING STATUS jobid" to track the loading progress again]
[Tip: Manage loading jobs with "ABORT/RESUME LOADING JOB jobid"]
Starting the following job, i.e.
JobName: load_social, jobid: social_m1.1528095850854
Loading log: '/home/tigergraph/tigergraph/logs/restpp/restpp_loader_logs/social/social_m1.1528095850854.log'
Job "social_m1.1528095850854" loading status
[FINISHED] m1 ( Finished: 2 / Total: 2 )
[LOADED]
+---------------------------------------------------------------------------+
| FILENAME | LOADED LINES | AVG SPEED | DURATION|
|/home/tigergraph/friendship.csv | 8 | 8 l/s | 1.00 s|
| /home/tigergraph/person.csv | 8 | 7 l/s | 1.00 s|
+---------------------------------------------------------------------------+
読み込みのログファイルの場所に注意してください。この例では、TigerGraphがデフォルトの場所である /home/tigergraph/
にインストールされていることを前提としています。インストールフォルダ内に、tigergraphという主な製品フォルダがあります。そのtigergraphフォルダの中にはlogs、document、config、bin、gstoreなどの数個のサブフォルダがあります。TigerGraphのインストール先が別の場所、例えば /usr/local/
である場合は、製品フォルダは /usr/local/tigergraph
になります。