DataPipeline/Sqoop

Apache Sqoop - import [2]

wave35 2023. 3. 15. 09:00

 

1. 최신행 Import 

 

스쿱은 최신행만 가져올 수 있는 기능을 제공한다.

예를 들어 2020-10-14일 이후의 열들을 가져오고 싶을 경우 사용될 수 있다.

--check-column (col)
가져올 행을 결정할 기준 열을 지정
(CHAR/NCHAR/VARCHAR/VARNCHAR/ LONGVARCHAR/LONGNVARCHAR 타입은 기준열로 지정불가)

--incremental (mode)
가져올 행을 결정하는 방법을 지정

--last-value (value)
가져올 열의 값에 대한 최대값을 지정

 

--incremental 인자는 두가지 타입을 지정할 수 있는데 하나는 append와 lastmodified이다.

 

[append]

append사용시 --check-column을 지정하고(예시에선 ID로 지정) --last-value를 500으로 지정한다.

즉 id가 500보다 큰 행을 가져오는 결과 값을 가진다.

sqoop import --connect jdbc:mysql://localhost:3306/dbname --table tt1 --username root -P --check-column id --incremental append --last-value 500

 

[lastmodified]

lastmodified사용시 수정된 열의 값이 --last-value로 지정된 타임스탬프보다 최근인 열을 가져온다. 

sqoop import --connect jdbc:mysql://localhost:3306/dbname --table tt1 --username root -P --check-column update_date --incremental lastmodified --last-value '2020-08-24 22:04:56.0'

 

 

 

2. 파일포맷

 

일반적으로 'delimited text'와 'sequenceFiles' 포맷을 지원한다. 

 

[ Delimited text ]

Delimited text형식이 default이며 --as-textfile 인자로 명시적으로 지정할 수 도 있다.

'ROW FORMAT' 옵션을 활용, delimited를 설정해 HIVE에서도 활용 할 수 있다. 

1,here is a message,2010-05-01
2,happy new year!,2010-01-01
3,another message,2009-11-12

 

[ SequenceFiles ]

SequenceFiles는 이진 형식 저장타입이다.

모든 데이터의 정확한 저장을 지원하며 Java클래스로 표현할 수 있어 MapReduce프로그램에서 사용되는 데이터를 저장하기에 적합하다. 그 중 대표적인게 다른 프로그래밍 언어로 작성된 데이터도 확장가능하여 효율적인 Avro데이터타입이다. 

 

[ 압축 ]

default는 비압축형식인데 압축을 위해선 --compress인수를 활용할 수 있으며,

하둡압축코덱을 위한 --compression-codec도 지원한다.

 

 

 

3. Large Data 처리

 

스쿱은 큰 데이터(BLOB, CLOB)를 처리하기 적합하다.

BLOB는 바이너리 데이터로 RDB외부에 저장하기 위한 데이터타입이다. CLOB는 문자열 데이터를 저장하기 위한 타입.

스쿱은 이를 처리하기 위해 메모리에 전부 올려놓치 않고 스트리밍 방식으로 처리할 수 있게 인라인으로 저장한다.

인라인 데이터를 통해 모든 데이터를 액세스 할 수 있다. 

 

사용할 수 인자는 아래와 같다.

--enclosed-by <char> 필수 포함 필드 문자 설정
--escaped-by <char> 이스케이프 문자 설정
--fields-terminated-by <char> 필드 구분 문자 설정
--lines-terminated-by <char> 줄 끝 문자(개행) 설정
--mysql-delimiters mysql 기본 구분자 사용 ( 줄:\n, 이스케이프:\, 선택적 포함:' )
--optionally-enclosed-by <char> 필드 동봉 문자 설정

escape character지원 문자: \b, \n, \r, \t, \", \\' \\

 

예제 데이터셋

Some string, with a comma.
Another "string with quotes"

 

스쿱명령어

$ sqoop import --fields-terminated-by , --escaped-by \\ --enclosed-by '\"' ...

 

결과 값

"Some string, with a comma.","1","2","3"...
"Another \"string with quotes\"","4","5","6"...