Graph Data Import
이 절에서는 외부 foreign 파일로부터 그래프 데이터를 가져오는 예제를 소개합니다.
예제
서버 파일 시스템의 파일과 연동하는 AgensGraph foreign-data wrapper를 사용하는 데 필요한 익스텐션 ‘file_fdw’를 설치합니다.
CREATE EXTENSION file_fdw;
데이터 가져오기 서버를 생성합니다.
CREATE SERVER import_server FOREIGN DATA WRAPPER file_fdw;
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'
);
가져오기를 실행합니다. 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;