복붙노트

[HADOOP] 하이브 다른 테이블로 한 테이블 JSON 데이터 삽입

HADOOP

하이브 다른 테이블로 한 테이블 JSON 데이터 삽입

나는 데이터의 키 필드를 기반으로 다른 테이블에 하나 개의 테이블에서 JSON 데이터를 삽입 할.

내 데이터는 다음과 같습니다

다음은 "BOX"또는 "GAP"또는 "ABC"나는 다른 테이블에 특정 JSON 행의 필드를 채우려 여부, 버전에 따라

예를 들어 버전 인 경우이 "GAP"다음 하나 개의 테이블에서 특정 행을 채우는 "BOX는"그때는 BOX에 대한 모든 행을 말은 ... 다른 테이블을 채울 ...

나는 HIVE를 사용하여이를 달성 할 수있는 방법. 도와주세요.

참고 : 내 JSON 데이터 유형 문자열 열로 한 테이블에

해결법

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

    1.데모

    데모

    create table src (myjson string);
    
    insert into src values
        ('{"Rtype":{"ver":"1","os":"ms","type":"ns","vehicle":"Mh-3412","MOD":{"Version":[{"ABC":{"XYZ":"123.dfer","founder":"3.0","GHT":"Florida","fashion":"fg45","cdc":"new","dof":"yes","ts":"2000-04-01T00:00:00.171Z"}}]}}}')
       ,('{"Rtype":{"ver":"1","os":"ms","type":"ns","vehicle":"Mh-3412","MOD":{"Version":[{"GAP":{"XVY":"123.dfer","FAH":"3.0","GHT":"Florida","fashion":"fg45","cdc":"new","dof":"yes","ts":"2000-04-01T00:00:00.171Z"}}]}}}')
       ,('{"Rtype":{"ver":"1","os":"ms","type":"ns","vehicle":"Mh-3412","MOD":{"Version":[{"BOX":{"VOG":"123.dfer","FAH":"3.0","FAX":"Florida","fashion":"fg45","cdc":"new","dof":"yes","ts":"2000-04-01T00:00:00.171Z"}}]}}}')
    ;
    
    create table trg_abc (myjson string);
    create table trg_gap (myjson string);
    create table trg_box (myjson string);
    
    from src
    insert into trg_abc select myjson where get_json_object(myjson,'$.Rtype.MOD.Version[0].ABC') is not null
    insert into trg_gap select myjson where get_json_object(myjson,'$.Rtype.MOD.Version[0].GAP') is not null
    insert into trg_box select myjson where get_json_object(myjson,'$.Rtype.MOD.Version[0].BOX') is not null
    ;
    
  2. ==============================

    2.우선 당신은 하이브 테이블에서 JSON으로 데이터를 저장해야합니다 :

    우선 당신은 하이브 테이블에서 JSON으로 데이터를 저장해야합니다 :

    나는 당신의 하이브 테이블이 외부 가정 (보통 - 표 your_table을 만들 SHOW로 확인). 그렇다면 전체 데이터 세트는 예를 들어 S3A를 들어, 일부 HDFS / S3 경로에있다 : // your_bucket / your_jsons_location /

    다운로드 JSON-UDF-1.3.7-항아리 - dependencies.jar-와 병용 S3A을 ADD 실행 //your_bucket/lib/json-udf-1.3.7-jar-with-dependencies.jar; 그럼 당신은 당신이 가진 각각의 JSON 스키마 전용 JSON 테이블을 작성해야합니다 :

    CREATE EXTERNAL TABLE boxes
    (Rtype struct<ver:string,os:string,type:string,vehicle:string,MOD:struct<Version:array<struct<BOX:struct<VOG:string,FAH:string,FAX:string,fashion:string,cdc:string,dof:string,ts:string>>>>>)
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' location 's3a://your_bucket/your_jsons_location/';
    
    CREATE EXTERNAL TABLE gaps
    (Rtype struct<ver:string,os:string,type:string,vehicle:string,MOD:struct<Version:array<struct<GAP:struct<XVY:string,FAH:string,GHT:string,fashion:string,cdc:string,dof:string,ts:string>>>>>)
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' location 's3a://your_bucket/your_jsons_location/';
    
    CREATE EXTERNAL TABLE abcs
    (Rtype struct<ver:string,os:string,type:string,vehicle:string,MOD:struct<Version:array<struct<ABC:struct<XYZ:string,founder:string,GHT:string,fashion:string,cdc:string,dof:string,ts:string>>>>>)
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' location 's3a://your_jsons_location/';
    

    당신이 실행 안된다면 :

    SELECT * FROM boxes;
    SELECT * FROM gaps;
    SELECT * FROM abcs;
    

    각 테이블이 제대로 (생성 한 Statment에 지정된 스키마에 따라)에만 일치 jsons 구문 분석 된 것을 볼 수 있습니다. 각 테이블의 불일치의 사람은 NULL입니다.

    필터링하려면 unrelevant 기록 실행 SELECT Rtype.mod.version * [0]이 .abc가 NULL 상식 FROM;

    참고 :이 모든 설명이 jsons 하이브 테이블에 외부에 저장되어 있다고 가정 (특히 나는 S3를 사용하지만, 그것은 또한 HDFS 될 수 있습니다)

  3. from https://stackoverflow.com/questions/43383544/inserting-json-data-from-one-table-to-another-tables-in-hive by cc-by-sa and MIT license