Hive 뷰 작업 - Amazon Athena

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에서 intint로 나누면 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 UDFPresto functions and operators(Presto 함수 및 연산자) 설명서에서 동일한 함수가 서로 다른 특징을 갖는 경우 일치하지 않는 데이터 형식을 캐스팅해 보세요.

  • Function not registered – Athena가 현재 함수를 지원하지 않습니다. 자세한 내용은 이 문서 앞부분의 정보를 참조하십시오.