복붙노트

[HADOOP] 다른 데이터 유형 그룹과 두 개의 열을 비교하는 방법

HADOOP

다른 데이터 유형 그룹과 두 개의 열을 비교하는 방법

다른 그룹에 데이터 유형에서 비교를 수행 할 때 잠재적 인 데이터 손실을 처리하는 방법 : 이것은 내가 어제 제기 질문의 연장이다

HIVE에서는 인라인 SELECT 절 내에서 서로 다른 데이터 유형 그룹에있는 두 개의 열 사이의 비교를 수행 할 수있다? 내가 먼저 들어오는 메타 데이터가 각 열에 대해 무엇인지 확인한 다음 사용하는 것이 CAST 무엇을 선택합니다 논리를 제공해야합니다.

CASE 
    WHEN  Column1 <=> Column2 THEN 0 -- Error occurs here if data types are in different data type groups (i.e., BIGINT <=> STRING)
    ELSE 1
END

이것이 가능하지 않다면, 메타 데이터를 검색하고 특정 규칙에 따라 CAST'ing을 수행하는 해결 방법은? 예를 들어, :

그런 것처럼 열 2 BIGINT을 캐스팅 한 다음 비교를 수행한다. 가능한 가장 간단한 해결책이 요구된다. 나는 SELECT 문을 생성하는 기본 시스템에 상당한 코드를 변경할 필요가 없습니다 기대하고있다.

업데이트 2 : Sqoop을 쿼리를 생성하고 해당 시스템에 두 개의 열을 비교하는 SELECT 절을 수정하는 기능이 백엔드 시스템이있다. 우리가로 실행하는 문제는 사용되는 열을 암시 적으로 우리가 실행중인 HIVE / 클라우 데라의 이전 버전에 변환 할 수 있다는 점이다. 이제 우리는 암시 적 데이터 형식 변환을 지원하지 않는 버전으로 업그레이드하는 것을, 우리는 데이터 형식 변환을 지원하는 계속하는 가장 간단한 해결책을 찾을 필요가있다. 불행하게도,이 백 엔드에서 사용 가능한 메타 데이터가 없다, 그래서 SELECT 절에 그것을 밖으로 해킹을 시도하고있다

해결법

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

    1.캐스트 암시 좋은 생각이다 :

    캐스트 암시 좋은 생각이다 :

    CASE 
        WHEN  Column1 <=> cast(Column2 as bigint) THEN 0 
        ELSE 1
    END
    

    캐스팅 할 수없는이 경우, 캐스트의 결과는 NULL이다.

  2. from https://stackoverflow.com/questions/58240566/how-to-compare-two-columns-with-different-data-type-groups by cc-by-sa and MIT license