Hive 뷰 작업
Athena를 사용하여 외부 Apache Hive 메타스토어의 기존 뷰를 쿼리할 수 있습니다. Athena는 원본 뷰를 변경하거나 변환을 저장하지 않고 런타임에서 즉석으로 뷰를 변환합니다.
예를 들어 다음과 같이 Athena에서 지원되지 않는 구문(LATERAL VIEW explode()
등)을 사용하는 Hive 뷰가 있다고 가정합니다.
CREATE VIEW team_view AS SELECT team, score FROM matches LATERAL VIEW explode(scores) m AS score
Athena는 Hive 뷰 쿼리 문자열을 다음과 같이 Athena가 실행할 수 있는 문으로 변환합니다.
SELECT team, score FROM matches CROSS JOIN UNNEST(scores) AS m (score)
외부 Hive 메타스토어를 Athena에 연결하는 방법에 대한 자세한 내용은 외부 Hive 메타스토어 사용 단원을 참조하세요.
고려 사항 및 제한
Athena에서 Hive 뷰를 쿼리할 때 다음 사항을 고려해 보세요.
-
Athena는 Hive 뷰 생성을 지원하지 않습니다. 외부 Hive 메타스토어에 Hive 뷰를 만든 다음 Athena에서 쿼리할 수 있습니다.
-
Athena는 Hive 뷰에 대한 사용자 지정 UDF를 지원하지 않습니다.
-
Athena 콘솔의 알려진 문제로 인해 Hive 뷰는 뷰 목록 대신 테이블 목록 아래에 표시됩니다.
-
변환 과정은 자동이지만 특정 Hive 함수는 Hive 뷰에 대해 지원되지 않거나 특별한 처리가 필요합니다. 자세한 내용은 다음 섹션을 참조하세요.
Hive 함수 지원 제한
이 섹션에서는 Athena가 Hive 뷰에 대해 지원하지 않거나 특별한 처리가 필요한 Hive 함수에 대해 설명합니다. 현재 Athena는 주로 Hive 2.2.0의 함수를 지원하므로 상위 버전(예: Hive 4.0.0)에서만 사용할 수 있는 함수는 사용할 수 없습니다. Hive 함수의 전체 목록은 Hive 언어 설명서 UDF
집계 함수
특별한 처리가 필요한 집계 함수
Hive 뷰에 대한 다음 집계 함수는 특별한 처리가 필요합니다.
-
Avg -
avg(INT i)
대신avg(CAST(i AS DOUBLE))
을 사용하세요.
지원되지 않는 집계 함수
다음 Hive 집계 함수는 Athena에서 Hive 뷰에 대해 지원되지 않습니다.
covar_pop histogram_numeric ntile percentile percentile_approx
regr_count
, regr_r2
, regr_sxx
와 같은 회귀 함수는 Athena에서 Hive 뷰에 대해 지원되지 않습니다.
지원되지 않는 날짜 함수
다음 Hive 날짜 함수는 Athena에서 Hive 뷰에 대해 지원되지 않습니다.
date_format(date/timestamp/string ts, string fmt) day(string date) dayofmonth(date) extract(field FROM source) hour(string date) minute(string date) month(string date) quarter(date/timestamp/string) second(string date) weekofyear(string date) year(string date)
지원되지 않는 마스킹 함수
mask()
, mask_first_n()
와 같은 Hive 마스킹 함수는 Athena에서 Hive 뷰에 대해 지원되지 않습니다.
기타 함수
특별한 처리가 필요한 기타 함수
Hive 뷰에 대한 다음 기타 함수는 특별한 처리가 필요합니다.
-
md5 - Athena는
md5(binary)
를 지원하지만md5(varchar)
는 지원하지 않습니다. -
Explode - Athena는 다음 구문으로 사용되는 경우
explode
를 지원합니다.LATERAL VIEW [OUTER] EXPLODE(
<argument>
) -
Posexplode - Athena는 다음 구문으로 사용되는 경우
posexplode
를 지원합니다.LATERAL VIEW [OUTER] POSEXPLODE(
<argument>
)(pos, val)
출력에서 Athena는pos
열을BIGINT
로 취급합니다. 이 때문에 오래된 뷰를 피하기 위해pos
열을BIGINT
로 캐스팅해야 할 수 있습니다. 다음 예는 이 기법을 보여 줍니다.SELECT CAST(c AS BIGINT) AS c_bigint, d FROM table LATERAL VIEW POSEXPLODE(
<argument>
) t AS c, d
지원되지 않는 기타 함수
다음 Hive 함수는 Athena에서 Hive 뷰에 대해 지원되지 않습니다.
aes_decrypt aes_encrypt current_database current_user inline java_method logged_in_user reflect sha/sha1/sha2 stack version
연산자
특별한 처리가 필요한 연산자
Hive 뷰에 대한 다음 연산자는 특별한 처리가 필요합니다.
-
모드(Mod) 연산자(%) -
DOUBLE
형식이 암시적으로DECIMAL(x,y)
로 캐스팅되기 때문에 다음 구문은View is stale
오류 메시지를 반환할 수 있습니다.a_double % 1.0 AS column
이 문제를 해결하려면 다음 예제와 같이
CAST
를 사용하세요.CAST(a_double % 1.0 as DOUBLE) AS column
-
나누기 연산자(/) - Hive에서
int
를int
로 나누면double
을 생성합니다. Athena에서는 동일한 연산이 잘린int
을 생성합니다.
지원되지 않는 연산자
Athena는 다음 연산자를 Hive 뷰에 대해 지원하지 않습니다.
~A – 비트 NOT
A ^ b – 비트 XOR
A & b – 비트 AND
A | b – 비트 OR
A <=> b – null이 아닌 피연산자에 대해 같음(=
) 연산자와 동일한 결과를 반환합니다. 둘 다 NULL
인 경우 TRUE
를, 둘 중 하나가 NULL
인 경우 FALSE
를 반환합니다.
문자열 함수
특별한 처리가 필요한 문자열 함수
Hive 뷰에 대한 다음 Hive 문자열 함수는 특별한 처리가 필요합니다.
-
chr(bigint|double a) – Hive는 음수 인수를 허용하지만 Athena는 그렇지 않습니다.
-
instr(string str, string substr) –
instr
함수에 대한 Athena 매핑이INT
대신BIGINT
를 반환하므로 다음 구문을 사용하세요.CAST(instr(string str, string substr) as INT)
이 단계가 없으면 뷰가 오래된 것으로 간주됩니다.
-
length(string a) –
length
함수에 대한 Athena 매핑이INT
대신BIGINT
를 반환하므로 뷰가 오래된 것으로 간주되지 않도록 다음 구문을 사용하세요.CAST(length(string str) as INT)
지원되지 않는 문자열 함수
다음 Hive 문자열 함수는 Athena에서 Hive 뷰에 대해 지원되지 않습니다.
ascii(string str) character_length(string str) decode(binary bin, string charset) encode(string src, string charset) elt(N int,str1 string,str2 string,str3 string,...) field(val T,val1 T,val2 T,val3 T,...) find_in_set(string str, string strList) initcap(string A) levenshtein(string A, string B) locate(string substr, string str[, int pos]) octet_length(string str) parse_url(string urlString, string partToExtract [, string keyToExtract]) printf(String format, Obj... args) quote(String text) regexp_extract(string subject, string pattern, int index) repeat(string str, int n) sentences(string str, string lang, string locale) soundex(string A) space(int n) str_to_map(text[, delimiter1, delimiter2]) substring_index(string A, string delim, int count)
지원되지 않는 XPath 함수
xpath
, xpath_short
, xpath_int
와 같은 Hive XPath 함수는 Athena에서 Hive 뷰에 대해 지원되지 않습니다.
문제 해결
Athena에서 Hive 뷰를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
-
View
<view name>
is stale – 이 메시지는 일반적으로 Hive와 Athena 뷰 간의 형식 불일치를 나타냅니다. Hive LanguageManual UDF와 Presto functions and operators (Presto 함수 및 연산자) 설명서에서 동일한 함수가 서로 다른 특징을 갖는 경우 일치하지 않는 데이터 형식을 캐스팅해 보세요. -
Function not registered – Athena가 현재 함수를 지원하지 않습니다. 자세한 내용은 이 문서 앞부분의 정보를 참조하십시오.