복붙노트

[HADOOP] 빈 값 또는 NULL 값을 HIVE 쿼리 결과의 특정 값으로 바꿉니다.

HADOOP

빈 값 또는 NULL 값을 HIVE 쿼리 결과의 특정 값으로 바꿉니다.

쿼리가 선택한 열 중 하나에 대한 결과를 반환하지 않을 때 "기타"기본값을 표시하려고합니다. 예제를 보여 드리겠습니다.

이 쿼리는 os (에이전트) SO에 대한 빈 값을 반환합니다 (첫 번째 행에 있음).

select country, os(agent) SO, count(*) from clicks_data
where country is not null and os(agent) is not null
group   by country, os(agent);

산출:

ZA           4
ZA  Android  4
ZA  Mac      8
ZA  Windows  5

대신, 나는이 결과를 얻고 싶다.

ZA  Others  4
ZA  Android 4
ZA  Mac     8
ZA  Windows 5

내 다음 시도는이 쿼리이지만 실제로 작동하지 않습니다.

select country, regexp_replace(os(agent),'','Others') SO, count(*) from clicks_data 
where country is not null and os(agent) is not null 
group by country, os(agent);

결과는 다음과 같습니다.

ZA  Others  4
ZA  OthersAOthersnOthersdOthersrOthersoOthersiOthersdOthers 4
ZA  OthersMOthersaOtherscOthers 8
ZA  OthersWOthersiOthersnOthersdOthersoOtherswOtherssOthers 5

해결법

  1. ==============================

    1.LENGTH ()를 사용하여 열 값의 길이를 확인하십시오. > 0을 반환하고, 다른 값이 있으면 빈 값이나 NULL 값으로 0을 반환합니다.

    LENGTH ()를 사용하여 열 값의 길이를 확인하십시오. > 0을 반환하고, 다른 값이 있으면 빈 값이나 NULL 값으로 0을 반환합니다.

    또한 CASE WHEN ... END 블록의 열 값을 프레임화합니다.

    최종 검색어는 다음과 같이 표시 될 수 있습니다.

    SELECT country, CASE WHEN LENGTH(os(agent)) > 0 THEN os(agent) ELSE 'Others' END AS SO, COUNT(*) 
    FROM clicks_data 
    WHERE country IS NOT NULL AND os(agent) IS NOT NULL 
    GROUP BY country, os(agent);
    

    희망이 당신을 도와주세요!

  2. ==============================

    2.COALESCE가 귀하의 케이스에 가장 적합하고 최적의 솔루션이 될 것입니다.

    COALESCE가 귀하의 케이스에 가장 적합하고 최적의 솔루션이 될 것입니다.

    통사론: COALESCE (VALUE, DEFAULT_VALUE) : ​​값이 null 일 때 함수가 기본값을 반환합니다. 그렇지 않으면 VALUE;

    질문

    SELECT country, COALESCE(os(agent),'Others') AS SO, COUNT(*) 
    FROM clicks_data 
    WHERE country IS NOT NULL AND os(agent) IS NOT NULL 
    GROUP BY country, os(agent);
    

    희망이 당신의 문제에 대한 효율적인 솔루션이 될 것입니다.

  3. from https://stackoverflow.com/questions/30285169/replace-the-empty-or-null-value-with-specific-value-in-hive-query-result by cc-by-sa and MIT license