3. 기능#
이 장은 Altibase 하둡 커넥터의 기능을 예제와 함께 설명한다.
커맨드 라인 옵션#
Altibase 하둡 커넥터는 스쿱 기반으로 동작하기 때문에 스쿱이 제공하는 기능을 모두 지원한다. 이장은 일부 기능에 대해서만 설명하므로, 스쿱의 전체 기능은 Sqoop User Guide (v1.4.4)을 참고하도록 한다.
구문#
Altibase 하둡 커넥터를 실행하는 구문은 아래와 같다.
sqoop <command> --connect <url>
--driver <driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
옵션#
옵션 | 설명 |
---|---|
<command> | 이 문서에서는 아래의 명령어만 기술하므로, 다른 커맨드에 대해서는 위에서 언급한 스쿱 문서를 참고하기 바란다. export import list-databases list-tables |
--connect <url> | Altibase url을 명시한다. jdbc:Altibase://*ip*:*port*/mydb |
--driver <driver> | Altibase의 JDBC 드라이버 클래스를 명시한다. Altibase.jdbc.driver.AltibaseDriver |
--username <user> | 연결하려는 데이터베이스 사용자를 명시한다. |
--password <password> | 사용자의 패스워드를 명시한다. |
--connection-manager <connector> | Altibase 하둡 커넥터 클래스를 명시한다. com.altibase.sqoop.manager.AltibaseManager |
여기에 기술한 커맨드와 옵션 외에 다른 커맨드 또는 import 제어 옵션, export 제어 옵션 등에 대해서는 스쿱 사용자 가이드를 참고하기 바란다.
Import#
Import는 Altibase의 데이터를 HDFS 또는 Hive로 가져오는 기능이다. 이 절은 이러한 기능을 예제와 함께 설명한다.
텍스트 파일로 HDFS에 가져오기#
Altibase에 존재하는 특정 테이블의 데이터를 HDFS의 지정된 디렉토리에 텍스트 파일 형태로 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop import
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
-split-by <split_name>
저장되는 텍스트 파일은 기본적으로 CSV 형태이다. 아래 표의 옵션들을 사용해서 필드 종료 문자, 라인 종료 문자 같은 구분자들을 지정할 수 있다. 만약 사용자가 이 중에서 하나라도 지정하지 않으면 기본값이 사용된다.
옵션 | 설명 | 기본값 |
---|---|---|
--enclosed-by | 필드를 감싸는 문자로 필수 옵션이다. | \" |
--escaped-by | 이스케이프 문자 | |
--fields-terminated-by | 필드 구분 문자 | , |
--lines-terminated-by | 라인 종료 문자 | \n |
--mysql-delimiters | MySQL의 기본 구분자로 아래와 같다. fields-terminated-by: , lines-terminated-by: \n escaped-by: \ optionally-enclosed-by: ' |
|
--optionally-enclosed-by | 필드를 감싸는 문자로 선택 옵션이다. |
주의
필드 내에 라인 구분자, 필드 구분자가 포함되어 있는 경우, 큰 따옴표(") 같은 묶음 문자로 필드를 감싸 주어야 한다. 필드 내에 묶음 문자로 쓰이는 큰 따옴표(")가 포함된 경우에는 이스케이프 문자를 큰 따옴표 앞에 두어 묶음 문자가 아님을 표시해야 한다. 현재 sqoop에는 묶음 문자와 이스케이프 문자를 동일하게 지정하면 비정상적으로 동작하는 버그가 있기 때문에, Altibase 하둡 커넥터는 묶음 문자의 기본값만 큰 따옴표(")로 제공하고 이스케이프 문자는 사용자가 직접 지정하도록 지원한다.
Sequence 파일로 HDFS에 가져오기#
Altibase에 존재하는 특정 테이블의 데이터를 HDFS의 지정된 디렉토리에 Sequence 파일 형태로 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop import
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
-split-by <split_name>
--as-sequencefile
Avro 파일로 HDFS에 가져오기#
Altibase에 존재하는 특정 테이블의 데이터를 HDFS의 지정된 디렉토리에 Avro 파일 형태로 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop import
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
-split-by <split_name>
--as-avrodatafile
쿼리를 사용해서 HDFS에 가져오기#
사용자가 지정한 질의문으로 Altibase에 존재하는 특정 테이블의 데이터를 조회하여 HDFS에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop import
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
-split-by <split_name>
--boundary-query <query>
Hive에 가져오기#
Altibase에 존재하는 특정 테이블의 데이터를 Hive에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop import
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
-split-by <split_name>
--hive-import
Export#
Export는 HDFS의 데이터를 Altibase로 내보내는 기능이다. 옵션에 따라 데이터베이스에 데이터를 삽입하거나 기존 데이터를 갱신하는 동작이 수행된다.
데이터 삽입#
HDFS의 데이터를 Altibase의 특정 테이블에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop export
-D sqoop.export.records.per.statement=<size>
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
--export-dir <dir>
sqoop.export.records.per.statement의 값을 1보다 크게 지정하면 Altibase 하둡 커넥터는 배치 모드(batch mode)로 동작한다. 배치 모드에서는 한 번의 Execute 수행으로 여러 건의 레코드가 삽입된다. 이 옵션은 커맨드 옵션(export) 뒤에 다른 옵션들보다 먼저 나와야 한다. sqoop.export.records.per.statement의 값을 1로 지정하면 Altibase 하둡 커넥터가 배치 모드로 동작하지 않는다.
CSV 파일에서 데이터 삽입#
CSV 파일을 사용해서 export하는 경우, 구분자들을 지정하는 옵션을 사용할 수 있다. 사용 가능한 옵션에 대한 상세한 설명은 "텍스트 파일로 HDFS에 가져오기" 절을 참고하기 바란다.
배치 모드로 데이터 삽입#
Altibase JDBC 드라이버의 배치 모드 기능을 사용하여 HDFS의 데이터를 Altibase의 특정 테이블에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop export
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
--export-dir <dir>
--batch
--batch 옵션 지정 여부에 관계없이 Altibase 하둡 커넥터는 기본으로 배치 모드로 동작하며, 한 번의 Execute 수행으로 기본 100건의 레코드가 삽입된다. Altibase 하둡 커넥터가 배치 모드로 동작하지 않게 하려면, -D sqoop.export.records.per.statement 옵션을 1로 지정해야 한다.
데이터 갱신#
Altibase의 특정 테이블의 데이터를 HDFS의 데이터로 갱신하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop export
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
--export-dir <dir>
-update-key <column>
데이터 갱신 또는 삽입#
HDFS의 데이터가 Altibase에 존재하면 갱신하고, 존재하지 않으면 삽입하는 기능이다. sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop export
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
--export-dir <dir>
-update-key <column>
--update-mode allowinsert
주의: 이 기능은 Altibase의 merge 구문을 이용하기 때문에, Altibase 하둡 커넥터가 버전 6.3.1 이상의 Altibase와 함께 동작할 때만 지원된다.
Staging-table을 이용한 데이터 삽입#
Sqoop은 export 처리를 여러 개의 트랜잭션으로 수행하기 때문에 일부 데이터는 커밋이 실패할 수도 있다. --staging-table 옵션은 이것을 방지하기 위한 것으로, HDFS의 데이터를 이 옵션에 지정한 테이블에 먼저 삽입한 후에, 이 테이블의 데이터를 Altibase의 대상 테이블로 이동하는 기능이다. sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop export
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
-table <table_name>
--export-dir <dir>
-update-key <column>
--staging-table <table_name>
list-databases#
Altibase의 데이터베이스 목록을 조회하려면, sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop list-databases
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager
list-tables#
Altibase에 존재하는 테이블들을 조회하려면, sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.
% sqoop list-tables
--connect <url>
--driver <jdbc_driver>
--username <user>
--password <password>
--connection-manager com.altibase.sqoop.manager.AltibaseManager