Graph Data Import

이 절에서는 외부 foreign 파일로부터 그래프 데이터를 가져오는 예제를 소개합니다.

예제

  1. 서버 파일 시스템의 파일과 연동하는 AgensGraph foreign-data wrapper를 사용하는 데 필요한 익스텐션 ‘file_fdw’를 설치합니다.

CREATE EXTENSION file_fdw;
  1. 데이터 가져오기 서버를 생성합니다.

CREATE SERVER import_server FOREIGN DATA WRAPPER file_fdw;
  1. foreign 파일로부터 데이터를 받을 foreign 테이블을 생성합니다.

CREATE FOREIGN TABLE vlabel_profile (id graphid, properties text)
SERVER import_server
OPTIONS( FORMAT 'csv', HEADER 'false', FILENAME '/path/file.csv', delimiter E'\t');
CREATE FOREIGN TABLE elabel_profile (id graphid, start graphid, "end" graphid, properties text)
SERVER import_server
OPTIONS( FORMAT 'csv', HEADER 'false', FILENAME '/path/file.csv', delimiter E'\t');

이 ‘properties text’ 항목은 상황에 따라 다르게 작성해야 합니다. 다음 예제를 참고하십시오.

comments.csv

id|creationDate|locationIP|browserUsed|content|length		// This is the HEADER of CSV
2473901162497|1316237219961|77.240.75.197|Firefox|yes|3
2473901162498|1316225421570|213.180.31.8|Firefox|thanks|6
4123168604165|1345407771283|41.203.141.129|Firefox|LOL|3

이 경우 foreign 테이블의 스키마는 다음과 같아야 합니다.

create foreign table comments_profile
(
   id int8,
   creationDate int8,
   locationIP varchar(80),
   browserUsed varchar(80),
   content varchar(2000),
   length int4
)
server import_server
options
(
 FORMAT 'csv',
 HEADER 'true',		//Indicates the presence of a csv header
 DELIMITER '|',
 NULL '',
 FILENAME '/path/to/comments.csv'
 );
  1. 가져오기를 실행합니다. AgensGraph에서 정점과 간선은 JSONB 형식으로 저장되므로, 데이터는 JSONB 타입으로 캐스팅해야 합니다.

CREATE VLABEL test_vlabel;

LOAD FROM vlabel_profile AS profile_name 
CREATE (a:test_vlabel =to_jsonb(row_to_json(profile_name)));
CREATE ELABEL test_elabel;

LOAD FROM elabel_profile AS profile_name
MATCH (a:test_vlabel), (b:test_vlabel)
WHERE (a).id = to_jsonb(profile_name).start AND (b).id = to_jsonb(profile_name).end
CREATE (a)-[:test_elabel]->(b);

위 예제에 따라 다음과 같이 수행할 수 있습니다.

CREATE VLABEL comments;

LOAD FROM comments_profile AS ROW
CREATE (:comments =to_jsonb(row_to_json(row)));

데이터 가져오기와 인덱스

대량 삽입(bulk insertion) 중에 인덱스를 유지하는 비용은 매우 큽니다. AgensGraph는 인덱스를 일시적으로 비활성화한 후 나중에 다시 생성하는 방식으로 인덱스를 전환하는 문법을 제공합니다. 비활성화된 인덱스는 대량 삽입을 방해하지 않습니다. 대량 데이터 가져오기 후에는 REINDEX LABEL 옵션을 사용할 수 있습니다. 이 작업은 다소 시간이 걸리지만, 유효한 인덱스가 있는 상태에서 대량 삽입을 수행하는 것보다 훨씬 빠릅니다.

CREATE VLABEL test_vlabel DISABLE INDEX;
OR
CREATE VLABEL test_vlabel;

ALTER VLABEL test_vlabel DISABLE INDEX;

-- DATA IMPORT 
REINDEX VLABEL test_vlabel;