sftp
SSH 프로파일을 사용하여 원격 SFTP 서버의 파일 목록을 조회하거나, 파일 내용을 읽거나, 쿼리 결과를 파일로 업로드합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 드라이버 쿼리 또는 가공 쿼리 |
| 필요 권한 | SSH 프로파일 사용 권한 |
| 라이선스 사용량 | 집계함 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 미지원 |
문법
파일 목록을 조회하려면
파일 내용을 읽으려면
파일을 업로드하려면
옵션
format={text|csv|tsv|json}- 파일 형식 (기본값:
text)
text: 한 줄을 하나의 레코드로 읽거나 기록합니다.csv: CSV 형식으로 파일을 읽거나 기록합니다.tsv: 탭 구분 형식으로 파일을 읽거나 기록합니다.json: JSON 형식으로 파일을 읽거나 기록합니다.
offset=LONGcat동작에서 건너뛸 레코드 수. 0 이상의 정수를 지정합니다. (기본값:0)limit=LONGcat동작에서 읽을 최대 레코드 수. 0 이상의 정수를 지정합니다.encoding=STR- 파일 인코딩 (기본값:
utf-8) header=BOOLcat동작에서 CSV, TSV 형식 파일의 첫 번째 행을 헤더로 사용할지 여부 (기본값:f)fields=FIELD,...put동작에서 기록할 필드 목록. 쉼표(,)로 구분합니다.delimiter=STRput동작에서text형식의 필드 구분자 (기본값: 공백)append=BOOLput동작에서 기존 파일에 내용을 추가할지 여부.overwrite옵션과 동시에 사용할 수 없습니다. (기본값:f)overwrite=BOOLput동작에서 기존 파일을 덮어쓸지 여부.append옵션과 동시에 사용할 수 없습니다. (기본값:f)partition=BOOLput동작에서 경로에 시간 기반 매크로({logtime:yyyyMMdd}등)를 사용하여 파티션별로 파일을 분리할지 여부 (기본값:f)multisession=BOOLput동작에서 여러 SFTP 세션을 동시에 사용할지 여부 (기본값:f)maxsession=INTput동작에서 동시에 열 수 있는 최대 세션 수.multisession=t옵션이 활성화되어 있어야 합니다.
대상
PROFILE- SSH 프로파일 이름. 시스템에 등록된 SSH 접속 프로파일을 지정합니다.
PATH- SFTP 서버의 파일 또는 디렉터리 경로.
cat동작에서는 와일드카드(*)를 파일 이름에 사용할 수 있습니다.put동작에서partition=t인 경우 경로 매크로({logtime:yyyyMMdd}등)를 사용할 수 있습니다.
출력 필드
ls 동작의 출력 필드:
| 필드 | 타입 | 설명 |
|---|---|---|
| type | 문자열 | 항목 유형. dir 또는 file |
| name | 문자열 | 파일 또는 디렉터리 이름 |
| file_size | 64비트 정수 | 파일 크기 (바이트) |
| uid | 32비트 정수 | 파일 소유자 UID |
| gid | 32비트 정수 | 파일 그룹 GID |
| is_link | 불리언 | 심볼릭 링크 여부 |
| perms | 문자열 | 파일 권한 문자열 |
| modified_at | 날짜 | 마지막 수정 시각 |
cat 동작의 출력 필드는 format 옵션에 따라 달라집니다. text 형식에서는 line 필드에 한 줄의 텍스트를 할당합니다. csv, tsv 형식에서는 헤더 또는 열 인덱스 기반 필드를 할당합니다. json 형식에서는 JSON 키-값 쌍을 필드로 할당합니다. 모든 형식에서 _file 필드에 원본 파일 경로를 할당합니다.
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 40101 | 잘못된 sftp 명령어 문법입니다. sftp [프로파일] [오퍼레이터] [확장 옵션] | 명령어 문법이 올바르지 않은 경우 |
| 40102 | SSH 프로파일이 존재하지 않습니다. | 지정한 SSH 프로파일이 등록되지 않은 경우 |
| 40103 | SSH 프로파일을 사용할 권한이 없습니다. | 현재 사용자에게 해당 프로파일 사용 권한이 없는 경우 |
| 40104 | 유효하지 않은 sftp offset 옵션입니다. 0 이상의 정수를 사용해야 합니다. | offset 값이 정수가 아닌 경우 |
| 40105 | 유효하지 않은 sftp limit 옵션입니다. 0 이상의 정수를 사용해야 합니다. | limit 값이 정수가 아닌 경우 |
| 40106 | 유효하지 않은 sftp 명령어 오퍼레이터입니다. | 동작이 ls, cat, put 중 하나가 아닌 경우 |
| 40107 | 유효하지 않은 sftp 파일 포맷입니다. | format 값이 text, csv, tsv, json 중 하나가 아닌 경우 |
| 40108 | 잘못된 인코딩입니다. | 지원하지 않는 인코딩을 지정한 경우 |
| 40112 | sftp 명령어에 경로 매크로를 사용하는 경우 partition 옵션을 활성화해야 합니다. | 경로에 매크로가 포함되었으나 partition=t를 지정하지 않은 경우 |
| 40113 | sftp 명령어에 최대로 열 세션수를 지정하려면 multisession옵션을 활성화해야 합니다. | maxsession 옵션을 지정했으나 multisession=t가 없는 경우 |
| 40114 | sftp put명령어에서 partition 옵션을 사용하는 경우 overwrite 옵션을 false로 할 수 없습니다. | partition=t와 overwrite=f를 동시에 지정한 경우 |
| 40115 | sftp put 명령어에서 overwrite 와 append 옵션은 동시에 사용할 수 없습니다. | put 동작에서 overwrite와 append를 동시에 지정한 경우 |
런타임 오류
| 오류 코드 | 메시지 | 설명 | 후처리 동작 |
|---|---|---|---|
| 40109 | 파일 이름 외에는 와일드 카드를 사용할 수 없습니다. | 경로의 디렉터리 부분에 와일드카드를 사용한 경우 | 쿼리를 중단합니다. |
| 40110 | sftp 조회 대상이 디렉터리입니다. | cat 동작의 대상이 디렉터리인 경우 | 쿼리를 중단합니다. |
| 40111 | sftp 명령어를 실행할 수 없습니다. | SFTP 서버 연결 또는 파일 처리 중 오류가 발생한 경우 | SSH 연결을 종료합니다. |
| 40116 | sftp put 명령어에서 overwrite 옵션이 false인 경우 파일을 덮어 쓸 수 없습니다. | put 동작에서 기존 파일이 있으나 overwrite가 비활성인 경우 | 쿼리를 중단합니다. |
| 40117 | sftp put 명령어에서 기록할 필드 목록과 파일에 이미 기록된 필드 목록이 일치하지 않습니다. | put 동작에서 append 시 기존 헤더와 필드가 다른 경우 | 쿼리를 중단합니다. |
| 40118 | sftp 명령어에서 지정된 파일을 읽을 수 있습니다. | 파일 읽기 중 오류가 발생한 경우 | 쿼리를 중단합니다. |
설명
sftp 명령어는 시스템에 등록된 SSH 프로파일을 사용하여 원격 SFTP 서버와 통신합니다. 세 가지 동작을 지원합니다.
ls: 지정한 경로의 파일 및 디렉터리 목록을 조회합니다. 디렉터리를 먼저, 파일을 나중에 이름 순으로 정렬하여 출력합니다.ls동작은 드라이버 쿼리로 동작합니다.cat: 지정한 경로의 파일 내용을 읽어 레코드로 변환합니다. 와일드카드(*)를 파일 이름에 사용할 수 있습니다.cat동작은 드라이버 쿼리로 동작합니다.put: 입력 레코드를 지정한 경로의 파일에 기록합니다.put동작은 가공 쿼리로 동작하며, 입력 레코드를 그대로 다음 명령어로 전달합니다.
put 동작에서 partition 옵션을 활성화하면 경로에 시간 기반 매크로를 사용하여 레코드의 _time 필드 값에 따라 파일을 분리하여 기록할 수 있습니다. multisession 옵션을 활성화하면 파티션별로 별도의 SFTP 세션을 사용하여 동시에 여러 파일에 기록할 수 있습니다.
프로파일 이름과 파일 경로에 쿼리 매개변수(${})를 사용할 수 있습니다.
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
SFTP 서버의 파일 목록 조회
sftp myprofile ls /data/logsmyprofileSSH 프로파일을 사용하여/data/logs디렉터리의 파일 목록을 조회합니다. -
SFTP 서버에서 텍스트 파일 읽기
sftp myprofile cat /data/logs/access.log/data/logs/access.log파일을 텍스트 형식으로 읽어 한 줄씩 레코드로 변환합니다. -
CSV 파일을 헤더와 함께 읽기
sftp myprofile cat format=csv header=t /data/logs/report.csvCSV 파일의 첫 번째 행을 필드 이름으로 사용하여 파일을 읽습니다.
-
와일드카드를 사용하여 여러 JSON 파일 읽기
sftp myprofile cat format=json /data/logs/*.json/data/logs/디렉터리에서 확장자가.json인 모든 파일을 읽습니다. -
쿼리 결과를 SFTP 서버에 CSV 파일로 업로드
table WEB_APACHE_SAMPLE | stats count by method | sftp myprofile put format=csv fields=method,count /data/report.csv웹 접근 로그를 HTTP 메소드별로 집계한 결과를 CSV 형식으로 SFTP 서버에 업로드합니다.
-
파티션별로 파일 분리 업로드
table WEB_APACHE_SAMPLE | fields src_ip, method, uri, status, bytes | sftp myprofile put format=json partition=t overwrite=t /data/logs/{logtime:yyyyMMdd}/access.json레코드의 시간 값에 따라 날짜별 디렉터리에 JSON 파일을 분리하여 업로드합니다.
호환성
sftp 명령어는 소나 4.0 이전 버전부터 제공되었습니다.