CSV(쉼표로 구분된 값)는 관계형 데이터베이스(예: Oracle 또는 SQL Server)에서 내보낼 수 있는 파일 형식입니다. 그런 다음 Couchbase Server에서 cbimport 유틸리티.
참고: cbimport는 카우치베이스 엔터프라이즈 에디션과 함께 제공됩니다. Couchbase 커뮤니티 에디션의 경우 보다 제한적인 cbtransfer 도구를 사용하거나 도심형 로더 를 입력합니다.
데이터 마이그레이션을 위한 완벽한 솔루션은 관계형→CSV→카우치베이스 ETL이 아닐 수도 있습니다. 다음 게시물에서 고려해야 할 데이터 모델링 결정에 대해 설명하겠습니다. 하지만 우선 이 데이터를 '단계적'으로 고려하는 것이 출발점입니다.
참고: 이 글에서는 로컬에 설치된 SQL Server와 Couchbase Server 클러스터를 사용하고 있습니다. SQL Server, Oracle, MySQL, PostgreSQL 등의 경우에도 단계는 비슷합니다.
CSV로 내보내기
가장 먼저 해야 할 일은 CSV로 내보내는 것입니다. 두 개의 테이블이 있는 관계형 데이터베이스가 있습니다: Invoices 및 InvoiceItems.
이 두 테이블의 데이터를 두 개의 CSV 파일로 내보내려고 합니다. SQL Server 관리 스튜디오를 사용하면 여러 가지 방법으로 이 작업을 수행할 수 있습니다. 다음을 사용할 수 있습니다. sqlcmd 또는 bcp 을 입력합니다. 또는 Powershell의 Invoke-Sqlcmd
를 클릭하고 Export-Csv
. SQL Server 관리 스튜디오 UI를 사용할 수도 있습니다.
다른 관계형 데이터베이스에는 CSV 내보내기를 위한 명령줄 유틸리티, UI 도구 등이 있습니다.
다음은 'Invoices'라는 테이블에서 CSV 내보내기의 예입니다:
1 2 3 4 |
Id,InvoiceNum,InvoiceDate,BillTo,ShipTo 1,ABC123,2018-01-15 00:00:00.000,Lynn Hess,"허먼 트리슬러, 4189 오크 드라이브" 2,XYZ987,2017-06-23 00:00:00.000,Yvonne 폴락,"클라렌스 버튼, 1470 코스트 애비뉴" 3,FOO777,2018-01-02 00:00:00.000,Phillip Freeman,"론다 스넬, 4685 밸리 레인" |
다음은 "InvoiceItems"라는 관련 테이블에서 내보내는 내용입니다:
1 2 3 4 5 6 7 8 9 10 11 |
InvoiceId,제품,수량,가격 1,타이어,2,20.00 1,스티어링 휠,5,10.00 1,엔진 오일,10,15.00 1,브레이크 패드,24,1000.00 2,마우스 패드,1,3.99 2,마우스,1,14.99 2,컴퓨터 모니터,1,199.98 3,컵케이크,12,.99 3,생일 양초,1,.99 3,배달,1,30.00 |
Couchbase에 CSV 로드
이를 Couchbase 버킷으로 가져와 보겠습니다. 이미 "staging"이라는 이름의 빈 버킷을 만들었다고 가정하겠습니다.
먼저 invoices.csv를 가져옵니다.
송장 로드
1 |
C:\프로그램 파일\카우치베이스\서버\bin\cbimport csv -c localhost -u 관리자 -p 비밀번호 -b 스테이징 -d 파일://invoices.csv --generate-key invoice::%Id% |
참고: Linux/Mac의 경우 C:\프로그램 파일\Couchbase\서버\bin
로 설정하면 경로가 달라집니다.
자세히 살펴보겠습니다:
-
cbimport: 사용 중인 명령줄 유틸리티입니다.
-
csv: CSV 파일에서 가져오기 중입니다. JSON 파일에서 가져올 수도 있습니다.
-
-c localhost: 카우치베이스 서버 클러스터의 위치입니다.
-
-u 관리자 -p 비밀번호: 클러스터의 자격 증명. 이 예시보다 더 안전한 자격 증명을 사용하시길 바랍니다!
-
-b 스테이징: 데이터를 저장할 Couchbase 버킷의 이름입니다.
-
-생성-키 인보이스::%Id% Couchbase에서 고유 키를 만드는 데 사용되는 템플릿입니다. CSV의 각 줄은 하나의 문서에 해당합니다. 각 문서에는 고유한 키가 필요합니다. 저는 송장 문서임을 나타내는 접두사와 함께 기본 키(정수)를 사용하기로 결정했습니다.
3줄짜리 파일을 가져오면 최종 결과는 3개의 문서가 됩니다:
이 시점에서 스테이징 버킷 만 에는 송장 문서가 포함되어 있으므로 지금 변환을 수행해야 할 수 있습니다. 나중에 모델링 예제에서 이 작업을 수행할 수도 있지만 지금은 다음 파일로 넘어가겠습니다.
인보이스 항목 로드
1 |
C:\프로그램 파일\카우치베이스\서버\bin\cbimport csv -c localhost -u 관리자 -p 비밀번호 -b 스테이징 -d 파일://invoice_items.csv --generate-key invoiceitem::#UUID# |
이것은 지난번 가져오기와 거의 동일합니다. 한 가지 차이점은 새 파일(invoice_items.csv)이라는 점입니다. 하지만 가장 중요한 차이점은 -생성-키. 이러한 레코드에는 외래 키만 포함되지만 Couchbase의 각 문서에는 고유 키가 있어야 합니다. 궁극적으로 다음과 같이 결정할 수 있습니다. embed 이러한 레코드를 상위 송장 문서에 추가할 수 있습니다. 하지만 지금은 UUID를 사용하여 레코드에 대한 고유 키를 생성하기로 결정했습니다.
이 10줄짜리 파일을 가져오면 최종적으로 10개의 문서가 더 생깁니다:
다음 단계는 무엇인가요?
CSV 파일이 있으면 데이터를 Couchbase로 가져오는 것은 매우 쉽습니다. 하지만 이런 종류의 직접 번역은 그 자체만으로는 충분하지 않은 경우가 많습니다. 저는 데이터 모델링의 몇 가지 측면을 살펴봤습니다. SQL Server에서 마이그레이션에 대한 이전 블로그 게시물을 참조하세요.이 송장 예제는 곧 블로그 게시물에서 다시 살펴보도록 하겠습니다.
그 동안 다음 사항을 꼭 확인하세요. 카우치베이스가 오라클을 이기는 방법 에서 기업들이 특정 사용 사례에서 오라클을 대체하는 이유에 대해 자세히 알아보세요. 또한 관계형에서 NoSQL로 전환하기: 시작하는 방법 백서.
질문이나 의견이 있으시면 언제든지 여기에 남겨주시고 다음 주소로 문의해 주세요. 트위터 @mgroves를 클릭하거나 카우치베이스 포럼.