2017-10-10 10 views
0

배열에 2 열의 테이블을 외부 조인 할 필요가 있습니다.하이브, 배열로 항목별로 2 개의 테이블을 결합하십시오.

표 한 모델 :

  • 구조 ID - 문자열
  • IPS - 스트링

표 두 모델들의 어레이 - 문자열

  • 호스트

    • IP - 문자열
    • (있는 경우)

      두 번째 테이블에서 해당 IP를 가지고 1 테이블의 배열에서 모든 IP를 필요

      ID, IP, 호스트 이름 :

    내가 원하는 결과는 형식으로되어 일치 시키십시오.

    시작하는 방법이 확실하지 않습니다. 어떤 생각이나 참고 사항이라도 환영합니다.

  • +0

    질문에 대한 답을 얻으려면 예제 데이터가있는 테이블 모델이 필요합니다. – DanteTheSmith

    +0

    표 1 : 구조체 ID - 문자열, ips - 문자열의 배열. 표 2 : ip - 문자열, 호스트 이름 - 문자열. 그 결과는 다음과 같습니다 : id, ips, hostname (존재하는 경우) – user8753324

    +0

    질문에 약간의 수정을가했습니다. 승인을 받으면 더 간결하고 읽기가 쉽기 때문에 사람들에게 답을주기를 바랍니다. – DanteTheSmith

    답변

    0

    두 번째 표에서 분해 옵션을 사용하고 다음과 같이 결합을 수행 할 수 있습니다.

    는 문자열 이름의 배열 및 테이블이 데

    표 된 table_1 CREATE (ID 문자열, IPS 배열) 이름으로 된 table_1가 있다고 가정하자; CREATE TABLE table_2 (ip 문자열, 호스트 이름 int);

    그런 다음 explode udf를 사용하여 table_1에서 측면보기를 만들 수 있습니다.

    select id, ip from table_1 LATERAL VIEW explode (ips) ep AS ip;

    이렇게하면 배열의 각 값에 대해 단일 행을 여러 행으로 분해합니다. 자세한 내용은 Lateral view documentation을 읽으십시오.

    최종 결합 쿼리는 다음과 같습니다.

    SELECT t1.id,t1.ip, t2.hostname 
    FROM 
    (select id,ip from table_1 LATERAL VIEW explode(ips) ep AS ip) AS t1 
    LEFT JOIN table_2 AS t2 
    ON (t2.ip=t1.ip); 
    
    +0

    위의 해결 방법으로 문제가 해결 되었습니까? –