[HADOOP] 하이브 테이블의 데이터 행을 개별 행으로 가져 오려면 어떻게해야합니까?
HADOOP하이브 테이블의 데이터 행을 개별 행으로 가져 오려면 어떻게해야합니까?
다음 형식의 데이터를 하이브 테이블로 가져 오려고합니다.
[
{
"identifier" : "id#1",
"dataA" : "dataA#1"
},
{
"identifier" : "id#2",
"dataA" : "dataA#2"
}
]
이처럼 여러 파일을 가지고 있고 각 {}이 테이블에 한 행을 형성하기를 원합니다. 이것이 제가 시도한 것입니다 :
CREATE EXTERNAL TABLE final_table(
identifier STRING,
dataA STRING
) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION "s3://bucket/path_in_bucket/"
각 {}에 대해 단일 행을 생성하지는 않습니다. 나는 또한 시도했다.
CREATE EXTERNAL TABLE final_table(
rows ARRAY< STRUCT<
identifier: STRING,
dataA: STRING
>>
) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION "s3://bucket/path_in_bucket/"
그러나 이것 역시 작동하지 않습니다. 각 레코드가 하이브 쿼리의 배열에있는 항목으로 배열로 입력되도록 지정하는 방법이 있습니까? 무엇에 대한 제안?
해결법
-
==============================
1.데이터 파일의 JSON 레코드는 한 줄에 하나씩 나타나야하며 빈 줄은 NULL 레코드를 생성합니다.
데이터 파일의 JSON 레코드는 한 줄에 하나씩 나타나야하며 빈 줄은 NULL 레코드를 생성합니다.
이 json이 작동해야합니다.
{ "식별자": "id # 1", "dataA": "dataA # 1"}, { "식별자": "id # 2", "dataA": "dataA # 2"}
-
==============================
2.여기 당신이 필요로하는 것이 있습니다.
여기 당신이 필요로하는 것이 있습니다.
방법 1 : 배열에 이름 추가
데이터
{"data":[{"identifier" : "id#1","dataA" : "dataA#1"},{"identifier" : "id#2","dataA" : "dataA#2"}]}
SQL
SET hive.support.sql11.reserved.keywords=false; CREATE EXTERNAL TABLE IF NOT EXISTS ramesh_test ( data array< struct< identifier:STRING, dataA:STRING > > ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 'my_location'; SELECT rows.identifier, rows.dataA FROM ramesh_test d LATERAL VIEW EXPLODE(d.data) d1 AS rows ;
산출
방법 2 - 데이터 변경 없음
데이터
[{"identifier":"id#1","dataA":"dataA#1"},{"identifier":"id#2","dataA":"dataA#2"}]
SQL
CREATE EXTERNAL TABLE IF NOT EXISTS ramesh_raw_json ( json STRING ) LOCATION 'my_location'; SELECT get_json_object (exp.json_object, '$.identifier') AS Identifier, get_json_object (exp.json_object, '$.dataA') AS Identifier FROM ( SELECT json_object FROM ramesh_raw_json a LATERAL VIEW EXPLODE (split(regexp_replace(regexp_replace(a.json,'\\}\\,\\{','\\}\\;\\{'),'\\[|\\]',''), '\\;')) json_exploded AS json_object ) exp;
산출
from https://stackoverflow.com/questions/47522270/how-do-i-import-an-array-of-data-into-separate-rows-in-a-hive-table by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Apache Spark - spark의 내부 작업 스케줄러는 사용자 란 무엇이며 풀은 무엇인지 정의합니다 (0) | 2019.07.31 |
---|---|
[HADOOP] Hadoop 정렬 입력 순서 (0) | 2019.07.31 |
[HADOOP] Hadoop MapReduce에서 바이너리 파일 용 사용자 정의 InputFormat 및 RecordReader 만들기 (0) | 2019.07.31 |
[HADOOP] 나머지 API를 통해 MapReduce 작업 실행 (0) | 2019.07.31 |
[HADOOP] hadoop-core에 대한 maven artifactId hadoop 2.2.0 (0) | 2019.07.30 |