반응형
/*
-- Title : [N4j4.4] APOC Library 활용한 SQL Server 기반 Import
-- Tag : neo4j 네오포제이 apoc library apoc full apoc core apoc 라이브러리
*/
■ APOC Library란?
- Awesome Procedures on Cypher
- 개발자를 위한 공통 프로시저와 기능을 위한 표준 유틸리티 라이브러리
- 450개 이상이 표준 프로시저가 포함된 유틸리티, 변환, 그래프 업데이트 등 기능 제공
■ APOC Library 다운로드
- APOC Full, APOC Core 두 가지 라이브러리 제공
- APOC Full 내에 APOC Core 포함 (두 라이브러리 모두 설치하면 안됨)
- APOC 라이브러리는 Neo4j 내부 API와 연결되기에 버전이 일치해야 함
ㅁ APOC Library 다운로드 경로
- https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases
- APOC Full 라이브러리 다운로드
(apoc.load.jdbc 사용을 위함, JDBC 드라이버를 통한 SQL Server 연결)
- 다운로드한 APOC 라이브러리 실행을 위해 Neo4j 플러그인 디렉토리로 이동
경로 : /var/lib/neo4j/plugins
## Plugin 폴더 이동
[root@localhost ~]# cd /var/lib/neo4j/plugins
[root@localhost plugins]# pwd
/var/lib/neo4j/plugins
## APOC 파일 다운로드
[root@localhost plugins]# wget https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/4.4.0.9/apoc-4.4.0.9-all.jar
--2022-09-30 15:05:37-- https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/4.4.0.9/apoc-4.4.0.9-all.jar
Resolving github.com (github.com)... 20.200.245.247
Connecting to github.com (github.com)|20.200.245.247|:443... connected.
HTTP request sent, awaiting response... 302 Found
...
Saving to: ‘apoc-4.4.0.9-all.jar’
100%[======================================>] 21,645,102 7.59MB/s in 2.7s
2022-09-30 15:05:40 (7.59 MB/s) - ‘apoc-4.4.0.9-all.jar’ saved [21645102/21645102]
[root@localhost plugins]# ll
합계 21144
-rwxr-xr-x. 1 neo4j neo4j 2217 8월 29 18:02 README.txt
-rw-r--r--. 1 root root 21645102 9월 14 21:03 apoc-4.4.0.9-all.jar
■ SQL Server 연결을 위한 JDBC 드라이버 다운로드
## Plugin 경로 확인
[root@localhost plugins]# pwd
/var/lib/neo4j/plugins
## MSSQL-jdbc 드라이버 다운로드
[root@localhost plugins]# wget https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/8.4.1.jre11/mssql-jdbc-8.4.1.jre11.jar
--2022-09-30 15:16:37-- https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/8.4.1.jre11/mssql-jdbc-8.4.1.jre11.jar
Resolving repo1.maven.org (repo1.maven.org)... 151.101.52.209
Connecting to repo1.maven.org (repo1.maven.org)|151.101.52.209|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1311351 (1.2M) [application/java-archive]
Saving to: ‘mssql-jdbc-8.4.1.jre11.jar’
100%[======================================================>] 1,311,351 1.70MB/s in 0.7s
2022-09-30 15:16:38 (1.70 MB/s) - ‘mssql-jdbc-8.4.1.jre11.jar’ saved [1311351/1311351]
## 다운로드 확인
[root@localhost plugins]# ll
합계 22428
-rwxr-xr-x. 1 neo4j neo4j 2217 8월 29 18:02 README.txt
-rw-r--r--. 1 root root 21645102 9월 14 21:03 apoc-4.4.0.9-all.jar
-rw-r--r--. 1 root root 1311351 8월 28 2020 mssql-jdbc-8.4.1.jre11.jar
[root@localhost plugins]#
■ SQL Server 연결/조회
// 테이블 건수 조회
CALL apoc.load.jdbc("jdbc:sqlserver://172.20.20.93:1433;databaseName=MYDB;user=usr_neo4j;password=******"
,"SELECT * FROM dbo.tBook")
YIELD row
return count(*)
│"count(*)"│
│10 │
// JSON 조회
CALL apoc.load.jdbc("jdbc:sqlserver://172.20.20.93:1433;databaseName=MYDB;user=usr_neo4j;password=******"
,"SELECT * FROM dbo.tBook")
YIELD row
│{"bk_nm":"구성 가능 매체 구조","bk_id":"kr11","page_cnt":138,"pub_dt":"2020-02-07"}│
│{"bk_nm":"에어로졸 제공 시스템","bk_id":"kr12","page_cnt":196,"pub_dt":"2017-09-01"}│
│{"bk_nm":"표면 처리제","bk_id":"kr13","page_cnt":null,"pub_dt":"2020-11-13"│
// 필드 조회
CALL apoc.load.jdbc("jdbc:sqlserver://172.20.20.93:1433;databaseName=MYDB;user=usr_neo4j;password=******"
,"SELECT * FROM dbo.tBook")
YIELD row
return row.bk_id, row.bk_nm, row.page_cnt, row.pub_dt
limit 3
│"row.bk_id"│"row.bk_nm" │"row.page_cnt"│"row.pub_dt"│
│"kr11" │"구성 가능 매체 구조" │138 │"2020-02-07"│
│"kr12" │"에어로졸 제공 시스템"│196 │"2017-09-01"│
│"kr13" │"표면 처리제" │null │"2020-11-13"│
■ 노드 및 관계 생성
// VM에 설치된 Neo4j라서 1개의 DB만 가능
:use neo4j
// 초기화
match(n)
detach delete n;
// tBook 노드 생성
CALL apoc.load.jdbc("jdbc:sqlserver://172.20.20.93:1433;databaseName=MYDB;user=usr_neo4j;password=******"
,"SELECT * FROM dbo.tBook")
YIELD row
CREATE (:tBook {
bk_id: row.bk_id,
bk_nm: row.bk_nm,
page_cnt: row.page_cnt,
pub_dt: row.pub_dt,
fk_isbn_id: row.fk_isbn_id,
fk_pub_id: row.fk_pub_id
})
Added 10 labels, created 10 nodes, set 38 properties, completed after 510 ms.
// tISBN노드 생성
CALL apoc.load.jdbc("jdbc:sqlserver://172.20.20.93:1433;databaseName=MYDB;user=usr_neo4j;password=******"
,"SELECT * FROM dbo.tISBN")
YIELD row
CREATE (:tISBN {
isbn_id: row.isbn_id,
isbn_nm: row.isbn_nm,
isbn_cnt: row.isbn_cnt
})
Added 6 labels, created 6 nodes, set 18 properties, completed after 53 ms.
// tPublisher 노드 생성
CALL apoc.load.jdbc("jdbc:sqlserver://172.20.20.93:1433;databaseName=MYDB;user=usr_neo4j;password=******"
,"SELECT * FROM dbo.tPublisher")
YIELD row
CREATE (:tPublisher {
pub_id: row.pub_id,
pub_nm: row.pub_nm,
pub_city: row.pub_city,
pub_tp: row.pub_tp,
emp_cnt: row.emp_cnt
})
Added 6 labels, created 6 nodes, set 26 properties, completed after 55 ms.
// 관계 생성
match (b:tBook),(p:tPublisher)
where b.fk_pub_id = p.pub_id
create (b)-[r:PUBL_by]->(p) return type(r);
match (b:tBook),(i:tISBN)
where b.fk_isbn_id = i.isbn_id
create (b)-[r:CLASS_by]->(i) return type(r);
// 생성 조회
match(n) --> (m) return n,m
※ Resources
•https://db-hyunjin.tistory.com/49
•https://neo4j.com/developer/neo4j-apoc/
반응형