[HADOOP] 파일에 열 수가 다른 경우 동일한 Hive 테이블에 데이터를로드하는 방법
HADOOP파일에 열 수가 다른 경우 동일한 Hive 테이블에 데이터를로드하는 방법
열이 10 개인 기본 테이블 (직원)이 있고 /file1.txt의 데이터로드를 직원 테이블에로드하여 데이터를로드 할 수 있습니다.
내 질문은 file2.txt 파일에 동일한 열이 있지만 열 3과 열 5가없는 경우 동일한 테이블 (직원)을 처리하는 방법입니다. 데이터를 직접로드하면 마지막 열은 NULL NULL입니다. 그러나 대신 3 번째는 NULL로, 5 번째 열은 NULL로로드해야합니다.
Employee 테이블이 있고 file1.txt 및 file2.txt를 테이블에로드하려고한다고 가정하십시오.
file1.txt ========== id name sal deptid state coutry 1 aaa 1000 01 TS india 2 bbb 2000 02 AP india 3 ccc 3000 03 BGL india file2.txt id name deptid country 1 second 001 US 2 third 002 ENG 3 forth 003 AUS
file2.txt에는 sal 및 state라는 두 개의 열이 없습니다.
동일한 Employee 테이블을 사용하여 처리하는 방법이 필요합니까?
해결법
-
==============================
1.비균질 구조의 데이터 파일이 지원하는 테이블을 만드는 방법을 모릅니다. 그러나 수행 할 수있는 것은 서로 다른 열 구성에 대해 별도의 테이블을 정의한 다음 둘 다를 쿼리하는 뷰를 정의하는 것입니다.
비균질 구조의 데이터 파일이 지원하는 테이블을 만드는 방법을 모릅니다. 그러나 수행 할 수있는 것은 서로 다른 열 구성에 대해 별도의 테이블을 정의한 다음 둘 다를 쿼리하는 뷰를 정의하는 것입니다.
예를 제공하면 더 쉽다고 생각합니다. 나는 두 사람의 테이블을 사용할 것입니다. 둘 다 이름에 대한 열이 있지만 하나의 매장 높이도 있고 다른 매장의 무게는 다음과 같습니다.
> create table table1(name string, height int); > insert into table1 values ('Alice', 178), ('Charlie', 185); > create table table2(name string, weight int); > insert into table2 values ('Bob', 98), ('Denise', 52); > create view people as > select name, height, NULL as weight from table1 > union all > select name, NULL as height, weight from table2; > select * from people order by name; +---------+--------+--------+ | name | height | weight | +---------+--------+--------+ | Alice | 178 | NULL | | Bob | NULL | 98 | | Charlie | 185 | NULL | | Denise | NULL | 52 | +---------+--------+--------+
또는 문제에 대한 더 가까운 예로서, 하나의 테이블에는 이름, 높이 및 무게가 있고 다른 테이블에는 이름 및 무게 만 있으므로 높이가 "중간에서 누락"되었다고 가정 해 봅시다.
> create table table1(name string, height int, weight int); > insert into table1 values ('Alice', 178, 55), ('Charlie', 185, 78); > create table table2(name string, weight int); > insert into table2 values ('Bob', 98), ('Denise', 52); > create view people as > select name, height, weight from table1 > union all > select name, NULL as height, weight from table2; > select * from people order by name; +---------+--------+--------+ | name | height | weight | +---------+--------+--------+ | Alice | 178 | 55 | | Bob | NULL | 98 | | Charlie | 185 | 78 | | Denise | NULL | 52 | +---------+--------+--------+
후자는 중복 행을 제거하려고 시도하기 때문에 공용체가 아닌 공용체를 모두 사용해야합니다.
-
==============================
2.지정된 열에 직접로드 할 수있는 방법이없는 것 같습니다.
지정된 열에 직접로드 할 수있는 방법이없는 것 같습니다.
따라서 이것은 아마도 당신이해야 할 일입니다.
상황은 반대 시나리오를 다루는이 질문과 매우 유사합니다 (몇 열만로드하려는 경우).
from https://stackoverflow.com/questions/39580335/how-to-load-data-to-same-hive-table-if-file-has-different-number-of-columns by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 설정시 네임 노드가 하둡에서 작동하지 않는 이유 (0) | 2019.09.06 |
---|---|
[HADOOP] Fi-Ware Cosmos : 이름 노드가 안전 모드에 있습니다 (0) | 2019.09.06 |
[HADOOP] 하이브에서 각 그룹에 대해 샘플링하는 방법은 무엇입니까? (0) | 2019.09.06 |
[HADOOP] oozie를 통한 sqoop 내보내기 실패 (0) | 2019.09.06 |
[HADOOP] Webhdfs가 잘못된 데이터 노드 주소를 반환합니다 (0) | 2019.09.06 |