728x90
반응형
하이브 서버에서 테이블 생성
$ docker exec -it [하이브서버] bash
# 하이브 실행
# hive
# 테이블 생성
hive> CREATE TABLE if not exists default.person(
> pid INT,
> name STRING,
> language STRING,
> gender STRING
> )
> CLUSTERED BY (pid) into 1 BUCKETS
> STORED AS ORC
> LOCATION 'hdfs://[네임노드 이름]:[포트]/[폴더명]'
> TBLPROPERTIES('transactional'='true');
OK
Time taken: 1.378 seconds
- CLUSTERED BY (pid) into 1 BUCKETS
테이블은 pid라는 열을 기준으로 클러스터링되며, 버킷의 수는 1개입니다. 이는 테이블의 데이터를 효율적으로 저장하고 쿼리 성능을 향상시키는 데 도움이 됩니다. - STORED AS ORC
테이블의 데이터는 ORC(Optimized Row Columnar) 형식으로 저장됩니다. ORC는 Hadoop 데이터를 저장하고 처리하는 데 최적화된 형식입니다. - LOCATION 'hdfs://[네임노드 이름]:[포트]/[폴더명]'
테이블의 데이터는 HDFS(Hadoop Distributed File System)의 지정된 위치에 저장됩니다. - TBLPROPERTIES('transactional'='true')
테이블은 ACID(Atomicity, Consistency, Isolation, Durability) 트랜잭션을 지원하도록 설정됩니다. 이는 Hive에서 UPDATE 또는 DELETE 작업을 수행할 수 있게 합니다.
Hive 테이블 Insert
INSERT INTO table person VALUES
(1, 'Sioux Clarey', 'Thai', 'Female'),
(2, 'Celine Bowbrick', 'Luxembourgish', 'Female'),
(3, 'Kiri Ebbetts', 'Malay', 'Female'),
(4, 'Seward Heinritz', 'French', 'Male'),
(5, 'Enriqueta Ruf', 'Malay', 'Female'),
(6, 'Barth Hub', 'Kazakh', 'Male'),
(7, 'Scot Tilliard', 'Amharic', 'Genderfluid'),
(8, 'Hortense Rishworth', 'Afrikaans', 'Female'),
(9, 'Karil Bramsen', 'Kyrgyz', 'Female'),
(10, 'Rafaellle Goosnell', 'Hungarian', 'Male');
Hive 테이블 Select
hive> select * from person;
OK
10 Rafaellle Goosnell Hungarian Male
9 Karil Bramsen Kyrgyz Female
8 Hortense Rishworth Afrikaans Female
7 Scot Tilliard Amharic Genderfluid
6 Barth Hub Kazakh Male
5 Enriqueta Ruf Malay Female
4 Seward Heinritz French Male
3 Kiri Ebbetts Malay Female
2 Celine Bowbrick Luxembourgish Female
1 Sioux Clarey Thai Female
Time taken: 0.1 seconds, Fetched: 10 row(s)
Hive 테이블 Update
hive> update person set language = 'Korean' where pid = 2;
...
Log 중략
...
OK
Time taken: 1.583 seconds
# 조회 시 PID = 2 language = korean 으로 변경 확인
hive> select * from person;
OK
10 Rafaellle Goosnell Hungarian Male
9 Karil Bramsen Kyrgyz Female
8 Hortense Rishworth Afrikaans Female
7 Scot Tilliard Amharic Genderfluid
6 Barth Hub Kazakh Male
5 Enriqueta Ruf Malay Female
4 Seward Heinritz French Male
3 Kiri Ebbetts Malay Female
2 Celine Bowbrick Korean Female
1 Sioux Clarey Thai Female
Time taken: 0.102 seconds, Fetched: 10 row(s)
Hive 테이블 Delete
hive> delete from person where pid = 7;
...
Log 중략
...
OK
Time taken: 1.705 seconds
// pid = 7 삭제 확인
hive> select * from person;
OK
10 Rafaellle Goosnell Hungarian Male
9 Karil Bramsen Kyrgyz Female
8 Hortense Rishworth Afrikaans Female
6 Barth Hub Kazakh Male
5 Enriqueta Ruf Malay Female
4 Seward Heinritz French Male
3 Kiri Ebbetts Malay Female
2 Celine Bowbrick Korean Female
1 Sioux Clarey Thai Female
Time taken: 0.113 seconds, Fetched: 9 row(s)
트러블 슈팅 - 업데이트, 삭제 에러
set hive.support.concurrency = true;
set hive.enforce.bucketing = true;
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set hive.compactor.initiator.on = true;
set hive.compactor.worker.threads =1;
- set hive.support.concurrency = true;
동시성을 지원해 여러 쿼리를 동시 실행할 수 있도록 합니다. 여러 사용자가 동시에 쿼리를 실행하거나, 여러 쿼리가 동일한 테이블에 접근할 때 유용합니다 . - set hive.enforce.bucketing = true;
버킷팅을 강제해 테이블을 버킷으로 분할하도록 합니다. 데이터를 효율 저장 및 쿼리 성능을 향상에 도움이 됩니다. - set hive.exec.dynamic.partition.mode = nonstrict;
동적 파티셔닝 모드를 nonstrict로 설정해 동적 파티셔닝을 엄격하게 적용하지 않도록 합니다. 동적 파티셔닝은 파티션 열의 값이 쿼리 시점에 결정되는 경우에 유용합니다. - set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
DBTxnManager를 트랜잭션 관리자로 사용해 ACID 트랜잭션을 지원하도록 합니다. - set hive.compactor.initiator.on = true;
컴팩터를 실행하도록 설정해 데이터를 압축하고 효율적으로 저장하도록 합니다 . - set hive.compactor.worker.threads =1;
컴팩터 작업을 실행하는 작업 스레드의 수를 설정합니다. 이 값을 늘리면 컴팩션 작업이 빨리 완료될 수 있지만, 많은 리소스를 소비하게 됩니다.
728x90
반응형
'빅데이터DB' 카테고리의 다른 글
Kudu 독립적인 데이터베이스 사용 (1) | 2024.02.01 |
---|---|
Presto JDBC 연결 (1) | 2024.01.23 |
Single Store JDBC 연결 (0) | 2024.01.23 |
Hive Create External Table (1) | 2024.01.23 |
Hive JDBC 연결 (0) | 2024.01.23 |