반응형

/*
-- 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/

 

 

반응형

+ Recent posts