일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SlackWebhookOperator
- LDAP
- 람다 아키텍처
- jupyter
- Windows
- Example DAG
- java
- Scala
- airflow
- Kafka
- HDFS
- execution_date
- yarn
- python
- hadoop
- HBase
- slack app
- 정규표현식
- NoSQL
- slack
- HIVE
- HDP
- Namenode
- Service
- ambari
- docker
- re
- 빅데이터
- MapReduce
- Lambda architecture
- Today
- Total
IT 삽질기
Hive 테이블 복사하기 본문
Hive 테이블을 복사하는 방법을 알아보도록 하자
Hive 테이블을 복사하는 방법은 다음과 같이 나뉜다
1. hive 테이블의 구조(partition) 복사해 새로운 테이블을 만드는 방법
2. hive partition정보는 가지고 오지 않고 데이터만 복사해 새로운 테이블에 넣는 방법
3. partition과 데이터를 모두 복사하는 방법
먼저 복사하려고 하는 hive Table에 partition이 있는지 알아보도록 하자
DESC [DB].[TABLE]
# ex) DESC tmp.aa
partition이 있는 테이블은 아래와 같이 표시된다
반대로 partition이 없는 테이블은 아래와 같이 표시된다
파티션이 없어 데이터만 복사하고자 하는 경우
새로운 테이블을 만들 때 CREATE - SELECT문을 통해 만들면 된다
CREATE TABLE [new_db].[new_table] AS SELECT * FROM [old_db].[old_table]
# ex) CREATE TABLE tmp.bb AS SELECT * FROM tmp.aa
파티션이 있는 테이블의 경우
새로운 테이블을 먼저 만든 후 데이터를 이관한다
CREATE TABLE [new_db].[new_table] LIKE [old_db].[old_table]
# ex) CREATE TABLE tmp.bb LIKE tmp.aa
위의 쿼리를 사용해 테이블을 만들면 원본에 있던 partition 정보까지 복사하여 새로운 테이블이 생성된다
partition정보를 포함한 데이터를 옮기기 위해서는 몇가지 설정이 필요하다
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
위의 설정이 무엇인지 하나씩 확인해보자
먼저 hive.exec.dynamic.partition=true 설정은
데이터를 넣을 때 설정된 key 값에 따라 자동으로 partition을 생성해주는 옵션이다
위의 예에서 dt를 partition으로 설정했고 데이터를 insert할 때도 dt를 지정해주면 dt 값에 따라 새로운 partition이 동적으로 생성될 것이다
hive.exec.dynamic.partition.mode=nonstrict 역시 partition을 동적으로 생성하기 위해 필요한 설정값이며,
기본값은 strict이다
마지막으로 생성된 테이블에 데이터를 넣으면 partition을 포함한 테이블의 데이터까지 모두 새로운 테이블로 복사되게 된다
INSERT OVERWRITE TABLE [new_db].[new_table] PARTITION ([partition_column])
SELECT * FROM [old_db].[old_table]
# ex)
# INSERT OVERWRITE TABLE tmp.bb PARTITION (dt)
# SELECT * FROM tmp.aa
끝으로 정리해보자
1. hive 테이블의 구조(partition) 복사해 새로운 테이블을 만드는 방법
DESC [DB].[TABLE]
# ex) DESC tmp.aa
2. hive partition정보는 가지고 오지 않고 데이터만 복사해 새로운 테이블에 넣는 방법
CREATE TABLE [new_db].[new_table] AS SELECT * FROM [old_db].[old_table]
# ex) CREATE TABLE tmp.bb AS SELECT * FROM tmp.aa
3. partition과 데이터를 모두 복사하는 방법
CREATE TABLE [new_db].[new_table] LIKE [old_db].[old_table]
# ex) CREATE TABLE tmp.bb LIKE tmp.aa
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE [new_db].[new_table] PARTITION ([partition_column])
SELECT * FROM [old_db].[old_table]
# ex)
# INSERT OVERWRITE TABLE tmp.bb PARTITION (dt)
# SELECT * FROM tmp.aa
'BigData > Hadoop' 카테고리의 다른 글
Hadoop ZKFC(Zookeeper Failover Controller) (0) | 2021.04.10 |
---|---|
Hadoop2 NameNode HA QJM(Quorum Journal Manager) (0) | 2021.04.08 |
HDP 3.1.4 Hive LLAP error(UnicodeDecodeError) (0) | 2021.04.05 |
HDP(Ambari) Node Groups (0) | 2021.03.22 |
HDP 인증 이슈(HDP repo 403 error) (0) | 2021.03.13 |