Transform 절
Transform 절
설명
TRANSFORM 절은 사용자가 지정한 명령이나 스크립트를 사용하여 입력을 변환할 수 있게 해줍니다.
출처: 문서
본문
구문
query:
SELECT TRANSFORM ( expression [ , ... ] )
[ inRowFormat ]
[ inRecordWriter ]
USING command_or_script
[ AS colName [ colType ] [ , ... ] ]
[ outRowFormat ]
[ outRecordReader ]
rowFormat
: ROW FORMAT
(DELIMITED [FIELDS TERMINATED BY char]
[COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[ESCAPED BY char]
[LINES SEPARATED BY char]
|
SERDE serde_name [WITH SERDEPROPERTIES
property_name=property_value,
property_name=property_value, ...])
outRowFormat : rowFormat
inRowFormat : rowFormat
outRecordReader : RECORDREADER className
inRecordWriter: RECORDWRITER record_write_class
참고:
MAP ..및REDUCE ..는 해당 쿼리에 대해 Hive dialect에서SELECT TRANSFORM ( ... )의 문법적 변형입니다. 따라서SELECT TRANSFORM대신MAP/REDUCE를 사용할 수 있습니다.
매개변수
-
inRowFormat
실행 중인 스크립트에 입력 데이터를 공급할 때 사용할 행 형식을 지정합니다. 기본적으로 열은
STRING으로 변환되고TAB으로 구분되어 사용자 스크립트에 공급됩니다. 마찬가지로 모든NULL값은 빈 문자열과NULL값을 구분하기 위해 리터럴 문자열\N으로 변환됩니다. -
outRowFormat
실행 중인 스크립트에서 출력을 읽을 때 사용할 행 형식을 지정합니다. 기본적으로 사용자 스크립트의 표준 출력은 TAB으로 구분된
STRING열로 취급되며,\N만 포함하는 셀은NULL로 재해석된 후 결과STRING열이 테이블 선언에 지정된 데이터 타입으로 일반적인 방식으로 캐스팅됩니다. -
inRecordWriter
입력 데이터를 쓰는 데 사용할 writer(정규화된 클래스 이름)를 지정합니다. 기본값은
org.apache.hadoop.hive.ql.exec.TextRecordWriter입니다. -
outRecordReader
출력 데이터를 읽는 데 사용할 reader(정규화된 클래스 이름)를 지정합니다. 기본값은
org.apache.hadoop.hive.ql.exec.TextRecordReader입니다. -
command_or_script
데이터를 처리할 명령 또는 스크립트 경로를 지정합니다.
참고:
- 스크립트 파일을 추가한 후 그 스크립트로 입력을 변환하는 것은 아직 지원되지 않습니다.
- 사용되는 스크립트는 로컬 스크립트여야 하며 클러스터의 모든 호스트에서 접근 가능해야 합니다.
-
colType
명령/스크립트의 출력을 캐스팅할 데이터 타입을 지정합니다. 기본값은
STRING데이터 타입입니다.
절 ( AS colName ( colType )? [, ... ] )?에 대해 다음 동작에 유의하세요.
- 실제 출력 열 수가 사용자가 지정한 출력 열 수보다 적으면 추가로 지정된 출력 열은 NULL로 채워집니다.
- 실제 출력 열 수가 사용자가 지정한 출력 열 수보다 많으면 해당하는 열을 유지하면서 실제 출력이 잘립니다.
- 사용자가 절
( AS colName ( colType )? [, ... ] )?를 지정하지 않으면 기본 출력 스키마는(key: STRING, value: STRING)입니다. key 열은 첫 번째 탭 앞의 모든 문자를 포함하고 value 열은 첫 번째 탭 뒤의 나머지 문자를 포함합니다. 탭이 없으면 두 번째 열value에는 NULL 값이 반환됩니다. 이는AS key, value를 지정하는 것과 다릅니다.AS key, value의 경우 탭이 여러 개면value는 첫 번째 탭과 두 번째 탭 사이의 부분만 포함하기 때문입니다.
예시
CREATE TABLE src(key string, value string);
-- transform using
SELECT TRANSFORM(key, value) USING 'cat' from t1;
-- transform using with specific record writer and record reader
SELECT TRANSFORM(key, value) ROW FORMAT SERDE 'MySerDe'
WITH SERDEPROPERTIES ('p1'='v1','p2'='v2')
RECORDWRITER 'MyRecordWriter'
USING 'cat'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
RECORDREADER 'MyRecordReader' FROM src;
-- use keyword MAP instead of TRANSFORM
FROM src INSERT OVERWRITE TABLE dest1 MAP src.key, CAST(src.key / 10 AS INT) USING 'cat' AS (c1, c2);
-- specific the output of transform
SELECT TRANSFORM(key, value) USING 'cat' AS c1, c2;
SELECT TRANSFORM(key, value) USING 'cat' AS (c1 INT, c2 INT);