json 문자열을 complex data types 으로 바꿔줄 수 있는 유용한 함수이다.이게 유용한게 GET_JSON_OBJECT 으로 데이터를 찾아서, 묶어낼때 정규식을 써서 해결해야하는걸 데이터 타입을 바꿔서 쉽게 해결할수 있는 경우가 존재한다. brickhoust 의 from_json 함수와 같은 기능을 한다고 보면 된다. 2024.01.18 - [데이터처리/Hive] - [HIVE] JSON 을 다루는 함수 설명 & 예시 - brickhouse UDF json_read 가 유용할 때?hive 3.x 에서는 json_read 함수가 없다보니, 아래와 같이 json 결과가 몇건인지 혹은 데이터를 구분자로 묶어야 할때 처리가 매우 난감하다. 왜냐면 아래와 같이 문자열 [] 가 있고, 문자열에는 ""..
hive 4.x 버전에서 유용한 함수들이 많이 추가되었다. 그중 유용한 함수가 있어 몇가지 소개하고자 한다.UniqueCount , Count Distinct 를 구할때 속도가 많이 느린 문제가 있다. PageCount 같은 경우는 단순히 count 하면 되지만, UserCount 를 할때는 중복 접속한 사람을 제거해야하는 문제인데, 문제는 이런 값을 구하는 속도가 너무 오래걸린다. 그래서 HyperHyperLog 알고리즘을 이용하여 빠르게 구하는 함수가 존재하는데, presto 에는 존재했는데 hive 에는 없어서 이 값을 구하려면 매우 오래걸렸다. (참고로 approx_distinct 는 근사치를 구하긴 하지만 정확도대비 성능을 보면 무조건 써야할 경우가 많다) https://github.com/a..
hive 에서는 기본적으로 제공되는 함수들이 많이 존재한다. 이것보다 더 다양한 기능을 만들고 싶다면 관련된 추상클래스를 확장해서 개발하고 빌드해서 add jar 를 해서 함수를 써야하는 번거로움이 존재한다. 근데, 단순히 기본으로 제공하는 함수의 조합을 함수와 유사하게 사용하는 방법이 존재한다. 그게 바로 macro 이다. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF LanguageManual UDF - Apache Hive - Apache Software FoundationHive Operators and User-Defined Functions (UDFs) Case-insensitive All Hive keywords a..
복잡한 스키마를 비슷한 목적에 맞게 그룹핑하고 관리하기 위해서 struct 로 필드를 관리할 필요성이 생긴다. 이런 작업은 보통 스키마레지스트리를 통해 관리하고, 데이터를 가공해서 적재할때 default 값에서 일부값만 변경하여 재적재 하고 싶은 경우가 생길수 있다. 하지만 struct 에서 일부값만 바꾸는 기능이 없다. 그래서 개밥먹기로 만들어서 구현했다. hive 3.x 버전 기준으로 빌드했고 hive 4.x 에서도 동작하는데는 큰 무리가 없을것으로 보인다. GenericUDF 를 만들면서 삽질기 사실 처음에 struct 의 리턴값을 List 형태로 만들면 named_struct 함수로 테스트할때 잘 동작했는데, orc 포맷의 테이블에서 사용할때는 내부적으로 OrcStruct 클래스를 사용해서 만들어..
hive 4.x 부터 array 를 다루는 UDF 가 기본 포함되었다. array 에서 특정아이템을 빼거나, 합치거나 이런 기능을 기본적으로 사용가능하다는건데 문제는 azure 도 그렇고 아직 hive 3.x 에 하둡 3.x 버전대가 주류를 이루고 있어서 기본적으로 사용을 못하는게 함정이다. 다행히 github 에 있는 hive 4.x 에서 array 를 다루는 udf 클래스만 추출해서 빌드한걸 테스트해보니 hive 3 버전대에서도 문제없이 동작하는걸 확인했다. 빌드 / 다운로드 UDF 를 빌드하는 방법은 Azure 도큐먼트에 잘 정리되어있다. 나는 이 글을 참고하고 github 에서 관련된 udf 만 추출해서 빌드를 했다. https://learn.microsoft.com/ko-kr/azure/hdin..
hive 에서 array 를 다루는 함수가 기본적으로 너무 없었다. 배열크기를 찾는 size, 배열에 포함여부를 찾는 array_contains, 그리고 배열을 정렬해주는 sort_array 정도만 존재했다. 사실상 explode() 처리후 다시 collect_list() 로 묶어서 처리하라는 말인데... 문제는 2개의 필드를 explode() 해야할 경우 이게 참 껄끄러운 문제가 많고 아쉬운점이 많았다. https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#LanguageManualUDF-CollectionFunctions Hive 4.x 추가된 Array 함수 hive 4.x 버전대부터 꽤 많은 UDF 가 추가되어있다. (근데 왜 h..
brickhouse 는 cookbook 이 정리가 잘 안되어있어서 좋은데도 사용을 잘 못하고 있는게 아닌가 싶다. 이번에는 timeseries 에 있는 함수의 예제를 정리하고자 한다. https://github.com/klout/brickhouse/tree/master/src/main/java/brickhouse/udf/timeseries 1. moving_avg 이동평균값을 구할때 사용한다. 쉽게 생각하면 주식차트에서 7일 이동평균, 30일 이동평균선 같이 평균값을 만들어 내는데 이런 값을 유도한다고 생각하면 된다. 그래서 array 값과 이동평균을 할 값을 지정하면 된다. 내부적으로 double 로 캐스팅해서 계산하므로 항상 소숫점으로 나온다. beeline> CREATE TEMPORARY FUNCT..
hive 의 udf 로 사용하다보면 아쉬운점이 많은데, brickhouse 의 UDF 를 쓰면 가려운 부분을 많이 긁어줘서 편하게 로직을 만들수 있다. 여러 케이스의 udf 가 있지만, 여기서는 json 관련 udf 의 샘플과 예시를 적어두고자 한다. 편의상 add jar 는 되어있다고 가정하겠다. https://github.com/klout/brickhouse GitHub - klout/brickhouse: Hive UDF's for the data warehouse Hive UDF's for the data warehouse. Contribute to klout/brickhouse development by creating an account on GitHub. github.com json 함수는 아..