Sqoop 명령어 옵션 모음

de_mini·2022년 12월 30일
1

sqoop

목록 보기
2/2

참고 : https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html

0. sqoop-help

Sqoop에는 도움말 도구가 포함되어있습니다.
사용 가능한 모든 도구 목록을 표시하려면 다음 명령을 사용합니다.

$ sqoop help
usage: sqoop COMMAND [ARGS]

인수설명
codegen 데이터베이스 레코드를 가져와 캡슐화하고 해석하는 Java 클래스를 생성함 (Table Schema 구조를 기반으로 DAO 클래스를 자동으로 생성함)
create-hive-tableRDBMS의 table을 기반으로 Hive에 table을 생성합니다.
eval RDBMS에 SQL 쿼리를 사용하여 콘솔에 결과 표시
export HDFS에서 RDBMS로 데이터를 내보낼 수 있습니다. (대상 테이블은 데이터베이스에 이미 존재해야 합니다.)
help 사용 가능한 옵션을 나열합니다.
import RDBMS에서 HDFS로 테이블 가져옵니다.
import-all-tablesRDBMS에서 HDFS로 테이블들을 가져옵니다.
import-mainframe 메인프레임 서버에서 HDFS로 데이터셋 가져오기
job job 생성 및 저장된 job 실행
list-databases 서버에서 사용 가능한 데이터베이스 리스트를 나열합니다.
list-tables 데이터베이스에서 사용 가능한 테이블 리스트를 나열합니다.
merge 오래된 dataset과 새로운 dataset을 유일 key를 기준으로 병합하여 하나의 dataset으로 만듭니다. (공통된 key의 행이 병합될때 새로운 dataset의 행이 우선적으로 사용됩니다.)
metastore metastore 명령어는 Sqoop이 공유된 메타데이터 저장소를 호스팅할 수 있도록 구성한다. 다수의 사용자와 (또는) 원격 사용자들은 이 메타스토어 내에 정의되는 (sqoop job으로 생성된) 저장된 잡을 정의하고 실행할 수 있다.
version 버전 정보 표시

1. sqoop-import

import는 개별 테이블을 RDBMS에서 HDFS로 Import합니다. 테이블의 각 행은 HDFS에서 개별 레코드로 표시됩니다.레코드는 텍스트 파일(한 줄에 1개 레코드)로 저장하거나 Avro 또는 SequenceFiles로 이진 표현으로 저장할 수 있습니다. (Apache Avro는 Json 형태의 스키마를 나타낸다고 한다. 추후에 알아볼 것.)

표1. Common argument

$ sqoop import --help

인수설명
--connect <jdbc-url>JDBC URL 지정
--connection-manager <class-name>사용할 connection-manager 클래스 지정 (예시 : --connection-manager org.apache.sqoop.manager.MySQLManager)
--driver <class-name>사용할 JDBC 드라이버 클래스를 수동으로 지정 (예시 : --driver com.mysql.jdbc.Driver)
--hadoop-mapred-home <dir>$HADOOP_MAPRED_HOME 재지정 (해당 path는 맵리듀스 home path)
--help도움말
--P콘솔에서 비밀번호 읽기
--password <password>인증 패스워드 설정
--username <username>인증 사용자 이름 설정
--verbose 작업하는 동안 더 많은 정보를 출력할때 사용

표2. Import control arguments

인수설명
--appendHDFS의 기존 Dataset에 데이터 추가
--as-avrodatafile데이터를 Avro data file로 가져오기
--as-sequencefile데이터를 SequenceFiles로 가져옵니다.
--as-textfile데이터를 일반 텍스트로 가져옵니다(기본값).
--as-parquetfile데이터를 Parquet 파일로 가져오기
--boundary-query <statement>분할 생성에 사용할 경계 쿼리 (mapper 개수에 따라서 쿼리가 분할하여 실행됨, index 1 ~ 200 값을 조회하고 매퍼가 4개라면 1~50, 51~100, 101~150, 101~200으로 나눠서 실행된다)
--columns <col,col,col?>테이블에서 가져올 속성
--delete-target-dirImport 대상 디렉토리가 있는 경우 삭제
--direct데이터베이스의 Native Tool을 사용하여 보다 빠르게 데이터를 가져올 수 있습니다. (mysqldump 등)
--fetch-size <n>데이터베이스에서 한 번에 읽을 항목 수입니다.
--inline-lob-limit <n>인라인 LOB의 최대 크기 설정 (LOB: 구조화 되지 않은 데이터)
-m,--num-mappers <n>n개의 맵 작업을 사용하여 병렬로 가져오기
-e,--query <statement>쿼리 결과를 Import 합니다. (예시 : -e "select ~")
--split-by <column-name>작업 단위를 분할하는 데 사용되는 테이블의 열입니다. --autoreset-to-one-mapper 옵션 과 함께 사용할 수 없습니다. (--boundary-query와 달리 데이터를 균일하게 분할합니다.)
--autoreset-to-one-mapper테이블에 기본 키가 없을 때 분할할 열이 제공되기 힘들 경우하나의 매퍼를 사용해야 합니다. --split-by 옵션 과 함께 사용할 수 없습니다 .
--table <table-name>import 테이블
--target-dir <dir>import 결과를 저장하는 HDFS dir (단일 테이블을 가져올때 사용한다. 저장경로 : /user/root/table)
--warehouse-dir <dir>저장할 상위 HDFS dir을 지정할 수 있다. (여러 테이블을 가져올때 상위 디렉토리명을 지정하기 위해 이 옵션을 사용한다. 저장경로 : /user/root/warehouse_dir/table)
--where <where clause>import 할때 사용할 WHERE 절
-z,--compressgzip으로 데이터 압축
--compression-codec <c>Hadoop 압축 코덱 지정 (기본 gzip, SequenceFile, text, Avro file 등으로 지정가능)
--null-string <null-string>문자열 열의 null 값에 쓸 문자열입니다. (표4. Hive arguments TIP2 참고)
--null-non-string <null-string>문자열이 아닌 열의 null 값에 쓸 문자열입니다. (표4 Hive arguments TIP2 참고)

표3. Incremental Imports

계속 전체 데이터를 가져오면 비효율적이기 때문에 이전에 import한 이후로 변경된 부분만 가져오고 싶을 때 사용합니다.

인수설명
--check-column (col)가져올 행을 결정할 때 검사할 열을 지정합니다. (열이 CHAR/NCHAR/VARCHAR/VARNCHAR/LONGVARCHAR/LONGNVARCHAR 유형이 아니어야 함)
--incremental (mode)Sqoop이 새 행을 결정하는 방법을 지정합니다. mode는 lastmodified와 append가 있으며 last_value는 check_column을 시간으로 두어 그 시간 이후 에 새로 등록된 데이터를 가져오게됩니다. append는 check_column에서 지정한 열을 기준으로 last-value보다 큰 row들을 가져오게 됩니다.
--last-value (value)last_value값 보다 큰 row들을 import 합니다.

쿼리 1. incremental의 mode가 lastmodified일 경우
sqoop import --table tablename --connect jdbc:mysql://dbhost/loudacre --username id --password p --incremental lastmodified --check-column mod_df --last-value ‘2015-09-30 16:00:00’
쿼리 2. incremental의 mode가 append일 경우
sqoop import --table tablename --connect jdbc:mysql://dbhost/loudacre --username id --pasword p --incremental append --check-column id --last-value ‘100'

표4. Hive arguments

TIP1. Hive는 이스케이프 문자를 지원하지만, 개행 문자 이스케이프는 처리하지 않습니다. 또한, 필드 구분 기호를 포함할 수 있는 문자를 둘러싸는 개념을 지원하지 않습니다. 따라서 하이브로 작업할 때 문자를 이스케이프하거나 둘러싸는 도움 없이 명확한 필드 및 레코드 종료 구분 기호를 선택하는 것이 좋습니다. 이는 하이브의 입력 구문 분석 기능의 한계 때문입니다.

TIP2. Sqoop은 기본적으로 NULL 값을 문자열 null로 가져옵니다. 그러나 Hive는 NULL 값을 나타내기 위해 \N 문자열을 사용하고 있으므로 NULL(IS NULL과 같은)을 처리하는 술어가 올바르게 작동하지 않습니다. NULL 값을 올바르게 보존하려면 가져오기 작업의 경우 매개 변수 --null-string 및 --null-non-string을 추가하고 내보내기 작업의 경우 --input-null-string 및 --input-null-non-string을 추가해야 합니다. sqoop은 생성된 코드에서 이러한 매개 변수를 사용하므로 값 \N에서 \\N으로 적절하게 이스케이프해야 합니다.

인수설명
--hive-home <dir>$HIVE_HOME 오버라이드
--hive-importRDBMS 테이블을 하이브로 가져옵니다 (설정되지 않은 경우 하이브의 기본 구분 기호 사용).
--hive-overwrite하이브 테이블의 기존 데이터를 덮어씁니다.
--create-hive-table기존 RDBMS 테이블을 기반으로 hive 테이블을 생성합니다. 이 옵션이 설정된 경우 생성할 테이블명이 존재할 경우 작업을 실패합니다.
--hive-database <table-name>하이브로 데이터를 가져올 때 사용할 데이터베이스 이름을 설정합니다.
--hive-table <table-name>하이브로 데이터를 가져올 때 사용할 테이블 이름을 설정합니다.
--hive-drop-import-delims하이브로 데이터를 가져올 때 문자열 필드에서 \n, \r 및 \01을 삭제합니다.
--hive-delims-replacement하이브로 데이터를 가져올 때 문자열 필드의 \n, \r 및 \01을 사용자 정의 문자열로 바꿉니다.
--hive-partition-key파티션을 나눌 때 사용할 Hive 필드명
--hive-partition-value <v>Hive로 가져올 때 파티션 키로 사용되는 문자열 값.
--map-column-hive <map>설정된 컬럼들에 대하여 SQL타입에서 Hive타입으로 매핑하는 기본값을 덮어쓴다.

2. sqoop-export

export 명령어는 HDFS에서 RDBMS로 데이터를 내보냅니다. 대상 테이블이 데이터베이스에 이미 존재해야 합니다.

표1. Common argument

$ sqoop export --help

인수설명
--connect <jdbc-url>JDBC 연결 문자열 지정
--connection-manager <class-name>사용할 연결 관리자 클래스 지정
--driver <class-name>사용할 JDBC 드라이버 클래스를 수동으로 지정
--hadoop-mapred-home <dir>$HADOOP_MAPRED_HOME 재지정
--help도움말
--P콘솔에서 비밀번호 읽기
--password <password>인증 패스워드 설정
--username <username>인증 사용자 이름 설정
--verbose 작업하는 동안 더 많은 정보를 출력할때 사용

표2. Export control arguments

인수설명
--columns <col,col,col…>테이블로 export 할 칼럼
--directmapper나 reducer를 실행하지 않아 빠르게 가져올 수 있음
--export-dir <dir>export 할 HDFS 소스 경로
-m,--num-mappers <n>n개의 맵 작업을 사용하여 병렬로 내보내기
--table <table-name>데이터베이스에 데이터를 채울 테이블명
--call <stored-proc-name>호출할 저장 프로시저
--update-key <col-name>업데이트 key 지정
--update-mode <mode>데이터베이스에서 새 행들이 매칭되지 않는 키로 발견이 되었을 때 어떻게 갱신이 수행되는지를 명시한다.
mode는 updataeonly (update), allowinsert(update + 존재하지 않는 key 발견시 insert)가 있습니다.
--input-null-string <null-string>문자열 열에 대해 null로 해석할 문자열
--input-null-non-string <null-string>문자열이 아닌 열에 대해 null로 해석할 문자열
--staging-table <staging-table-name>최종 테이블에 삽입되기 전에 데이터가 스테이징될 테이블입니다. 해당 테이블에 데이터가 존재한다면 --clear-staging-table 옵션을 사용해 테이블을 비워야 합니다. (export 작업이 실패하면 부분 데이터가 데이터베이스에 커밋되는 등 삽입 충돌이 발생할 위험성 때문에 보조 테이블을 쓴다.)
--clear-staging-tableexport 하기 전 staging-table에 있는 기존데이터들을 삭제합니다.
--batchJDBC 드라이버를 통하여 batch mode 사용

3. sqoop-eval

sqoop-eval를 사용하면 데이터베이스에 대해 간단한 SQL 쿼리를 빠르게 실행할 수 있습니다. 쿼리 결과는 콘솔에 출력됩니다. 이를 통해 사용자는 import 쿼리를 미리 사용해보고 예상 데이터를 가져왔는지 확인할 수 있습니다.
$ sqoop eval --connect jdbc:mysql://db.example.com/corp --query "SELECT * FROM Employees LIMIT 10"

4. sqoop-job

job 명령어는 저장된 job을 생성하고 이용할 수 있도록 한다. 저장된 job은 job을 등록할때 사용한 매개변수들을 기억한다. 그 잡을 작동시킴으로써 재실행될 수 있다.
(반복해서 사용할 sqoop 명령어가 있을때 job 생성 및 사용)

저장된 잡이 Incremental Import를 수행하는 데에 구성된다면, 지속적으로 가장 최근의 행들만 가져올 수 있도록 한다.

인수설명
--create <job-id>명시된 잡 아이디(명)으로 새로운 저장된 잡을 정의합니다. --로 분리된 두번째 Sqoop 명령줄이 명시되어야 하며 이것은 저장된 잡을 정의한다.
--delete <job-id>저장된 job을 삭제합니다.
--exec <job-id>--create로 정의된 job이 주어지면 그 job을 실행합니다.
--show <job-id>저장된 job의 설정을 표시합니다.
--list저장된 모든 job 나열

--create 옵션 예시 (myjob이라는 job을 생성, mysql의 mytable을 import 하는 job)
$ sqoop job --create myjob -- import --connect jdbc:mysql://example.com/db --table mytable

--show 옵션 예시 (tool, option 확인 후 원하는 기능을 수행한다면 exec명령어를 통해 해당 job을 실행할 수 있음)
$ sqoop job --show myjob

--exec 옵션 예시 (exec 옵션은 --의 뒤에 인자들을 제공하여 저장된 잡의 인자들을 오버라이드 할 수 있게 한다. 예를 들면, 아래와 같이 사용자명과 비밀번호를 명시할 수 있다.)
$ sqoop job --exec myjob -- --username root -P

profile
주니어 데이터엔지니어

0개의 댓글