[HADOOP] 하이브 다른 테이블로 한 테이블 JSON 데이터 삽입
HADOOP하이브 다른 테이블로 한 테이블 JSON 데이터 삽입
나는 데이터의 키 필드를 기반으로 다른 테이블에 하나 개의 테이블에서 JSON 데이터를 삽입 할.
내 데이터는 다음과 같습니다
다음은 "BOX"또는 "GAP"또는 "ABC"나는 다른 테이블에 특정 JSON 행의 필드를 채우려 여부, 버전에 따라
예를 들어 버전 인 경우이 "GAP"다음 하나 개의 테이블에서 특정 행을 채우는 "BOX는"그때는 BOX에 대한 모든 행을 말은 ... 다른 테이블을 채울 ...
나는 HIVE를 사용하여이를 달성 할 수있는 방법. 도와주세요.
참고 : 내 JSON 데이터 유형 문자열 열로 한 테이블에
해결법
-
==============================
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.우선 당신은 하이브 테이블에서 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 될 수 있습니다)
from https://stackoverflow.com/questions/43383544/inserting-json-data-from-one-table-to-another-tables-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 실패지도 작업의 #은 제한을 허용 초과했습니다 (0) | 2019.09.21 |
---|---|
[HADOOP] 무대-1 하둡 작업 정보는 : 감속기의 수는 항상 내가 그것을 변경할 수 없습니다입니다 1. 보여줍니다. 내가 어떻게 그것을 바꿀 수 있나요? (0) | 2019.09.21 |
[HADOOP] 커넥터를 ojdbc6 사용 Sqoop을 가져 오기 (0) | 2019.09.21 |
[HADOOP] 읽거나 파이썬 스크립트 하둡 파일 시스템에 기록 할 때 왜 이런 이상한 연결 오류는 무엇입니까? (0) | 2019.09.21 |
[HADOOP] 파이썬 [H2O.ai]에서 실행중인 H2O 서버에 연결할 수 없습니다 (0) | 2019.09.21 |