[HADOOP] 하이브에서 외부 테이블에 파티션 만들기
HADOOP하이브에서 외부 테이블에 파티션 만들기
내부 테이블에 동적 파티션을 성공적으로 작성하고 추가했습니다. 즉, 다음 단계를 사용하십시오.
1- 소스 테이블 작성
로컬에서 소스 테이블로 2로드 된 데이터
3- 파티션이있는 다른 테이블 생성-partition_table
4- 소스 테이블에서이 테이블로 데이터를 삽입하여 모든 파티션을 동적으로 생성
내 질문은 외부 테이블 에서이 작업을 수행하는 방법입니다. 나는 이것에 대해 너무 많은 기사를 읽었지만 혼란스러워 외부 테이블에 대한 파티션을 만들기 위해 기존 파티션에 대한 경로를 지정해야합니까 ??
예: 1 단계:
create external table1 ( name string, age int, height int)
location 'path/to/dataFile/in/HDFS';
2 단계:
alter table table1 add partition(age)
location 'path/to/already/existing/partition'
외부 테이블에서 파티셔닝을 진행하는 방법을 잘 모르겠습니다. 누군가 같은 것을 단계별로 설명하여 도움을 줄 수 있습니까?
미리 감사드립니다!
해결법
-
==============================
1.1. 아래 속성 설정
1. 아래 속성 설정
hive.exec.dynamic.partition = true 설정
hive.exec.dynamic.partition.mode = nonstrict 설정
2. 외부 파티션 된 테이블 작성
외부 table1 만들기 (이름 문자열, age int, height int) 위치 'path / to / dataFile / in / HDFS';
3. 소스 테이블에서 파티션 된 테이블로 데이터를 삽입하십시오.
기본적으로 프로세스는 동일합니다. 외부 파티션 된 테이블을 작성하고 파티션을 작성하고 저장할 테이블에 대한 HDFS 경로를 제공한다는 것입니다.
도움이 되었기를 바랍니다.
-
==============================
2.예, 파티션 필드가 무엇인지 명시 적으로 Hive에 알려야합니다.
예, 파티션 필드가 무엇인지 명시 적으로 Hive에 알려야합니다.
외부 테이블을 작성하려는 다음 HDFS 디렉토리가 있다고 가정하십시오.
/path/to/dataFile/
이 디렉토리에 이미 다음과 같이 데이터가 저장되고 (분할 된) 부서가 있다고 가정 해 봅시다.
/path/to/dataFile/dept1 /path/to/dataFile/dept2 /path/to/dataFile/dept3
이러한 각 디렉토리에는 각 파일이있는 여러 파일이 있습니다. 이름, 연령, 높이 등의 필드에 대한 실제 쉼표로 구분 된 데이터를 포함합니다.
e.g. /path/to/dataFile/dept1/file1.txt /path/to/dataFile/dept1/file2.txt
이제 이것에 대한 외부 테이블을 만들어 봅시다 :
1 단계. 외부 테이블을 만듭니다.
CREATE EXTERNAL TABLE testdb.table1(name string, age int, height int) PARTITIONED BY (dept string) ROW FORMAT DELIMITED STORED AS TEXTFILE LOCATION '/path/to/dataFile/';
단계 2. 파티션 추가 :
ALTER TABLE testdb.table1 ADD PARTITION (dept='dept1') LOCATION '/path/to/dataFile/dept1'; ALTER TABLE testdb.table1 ADD PARTITION (dept='dept2') LOCATION '/path/to/dataFile/dept2'; ALTER TABLE testdb.table1 ADD PARTITION (dept='dept3') LOCATION '/path/to/dataFile/dept3';
선택 쿼리를 한 번 실행하여 데이터가 성공적으로로드되었는지 확인하십시오.
-
==============================
3.아래 단계를 수행하십시오.
아래 단계를 수행하십시오.
그게 다야. 다음을 사용하여 파티션 정보를 확인할 수 있습니다
show partitions external_dynamic;
외부 테이블인지 아닌지를 확인할 수도 있습니다.
describe formatted external_dynamic;
외부 테이블은 데이터가 하이브웨어 하우스로 이동되지 않는 Hive의 테이블 유형입니다. 즉, U가 테이블을 삭제하더라도 데이터는 계속 유지되며 항상 최신 데이터를 가져옵니다. 이는 관리되는 테이블의 경우에는 해당되지 않습니다.
from https://stackoverflow.com/questions/32580356/creating-partition-in-external-table-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Pyspark 응용 프로그램은 부분적으로 dataproc 클러스터 리소스를 이용합니다 (0) | 2019.09.14 |
---|---|
[HADOOP] 하이브 추가 파티션 문은 선행 0을 무시합니다. (0) | 2019.09.14 |
[HADOOP] 동일한 테이블의 다른 배열 열과 관련하여 Hive 정렬 배열 열 (0) | 2019.09.14 |
[HADOOP] Hadoop / Eclipse- "main"스레드 예외 java.lang.NoClassDefFoundError : org / apache / hadoop / fs / FileSystem (0) | 2019.09.14 |
[HADOOP] 사용 중이거나 지금까지 생성 된 모든 하이브 데이터베이스를 나열하는 방법은 무엇입니까? (0) | 2019.09.14 |