https://www.slideshare.net/madvirus/ss-28761748
위 슬라이드를 보며 Hive에 관한 내용을 읽던 도중 제약 부분에 행 단위 수정/삭제 불가로 쓰여 있는 내용을 보았습니다. 더 자세히 알아보고 싶어 다음처럼 찾아보았고 번역을 하게 되었습니다.
https://stackoverflow.com/questions/17810537/how-to-delete-and-update-a-record-in-hive
Hive에서 레코드를 지우거나(delete) 갱신하는(update) 방법
저는 Hadoop, Hive, Hive JDBC를 설치하였습니다. 각자 잘 작동하고 있습니다. 하지만, 아직 문제가 있습니다. MySQL에서 사용하는 delete나 update 명령으로 Hive를 사용하여 하나의 레코드를 삭제하거나 갱신하는 방법이 Hive에서 작동하지 않습니다.
감사합니다.
------
12개의 답변 중 2 개의 답변만 추려냄.
Hive를 일반적인 RDBMS로 생각하면 안됩니다. Hive는 변하지 않는 데이터의 매우 큰 데이터 집합에 대한 배치처리에 더 적합합니다.
다음은 Hive 0.14 전 버전에 적용됩니다. 이후 버전은 @ashtonium님의 답변을 보세요.
레코드의 특정부분 집합이나 레코드를 삭제하거나 갱신하는 연산은 없고, 이는 나쁜 스키마의 싸인이라고 생각합니다.
다음은 당신이 찾아볼 수 공식문서에 있는 내용입니다.
하둡은 배치 처리 시스템이고 하둡 작업(jobs)은 대기 시간이 길고 작업 제출 및 스케쥴링에 상당한 오버헤드가 발생합니다. 결과적으로 Hive 쿼리에 대한 대기 시간은 데이터 집합이 매우 적을지라도 (여기서는 몇백메가 단위를 말합니다) 일반적으로 매우 (분 단위) 깁니다. 결국, 분석은 상당히 적은 양에서 실행하지만 몇 분 미만의 반복처리를 하는데 시간이 덜 걸리면서 반복 작업을 더 많이 하는 오라클 같은 시스템과는 비교될 수 없습니다. Hive는 상호작용하는 데이터 검색, 작은 데이터 셋이나 테스트 쿼리에 받아들일 수 있는 (하지만 최적화되지 않은) 대기 시간을 제공하는 게 목표입니다. Hive는 온라인 트랜잭션 처리를 위해 설계되지 않았고 실시간 쿼리 및 행 단위 update를 제공하지 않습니다. (웹 로그 같은) 변하지 않는 데이터의 큰 집합에 대한 배치 작업에는 최고입니다. |
이 한계를 벗어나서 작업하는 방법은 partition을 사용하는 것입니다. 저는 id가 어떻게 대응되는 지는 모르지만, id들의 다른 묶음을 분리해서 얻고 싶다면 id로 나누어서 테이블을 재설계할 수 있습니다. 그렇게 되면 당신이 제거하고 싶은 id들의 파티션을 쉽게 삭제(drop) 할 수 있습니다.
------
Hive 0.14.0부터 ACID 지원과 함께 INSERT... VALUES, UPDATE, DELETE 사용이 가능합니다.
INSERT ... VALUES 문법:
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
values_row는 (value [, value ...]) 이며 각 value는 null이나 다른 SQL에 적합한 리터럴입니다.
UPDATE 문법:
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
DELETE 문법:
DELETE FROM tablename [WHERE expression]
추가하면 Hive 트랜잭션 문서 내용입니다.
Hive 0.14.0부터 테이블이 ACID 쓰기(insert, update, delete)로 사용된다면 그 테이블 속성은 "트랜잭션"으로 그 테이블에 설정되어 있어야 합니다. 이 값이 없다면 insert는 이전 방식으로 작동되며; update와 delete는 제한될 것입니다. |
Hive DML 참조:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML
Hive 트랜잭션 참조:
https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions
'Java' 카테고리의 다른 글
CentOS6 gradle 3.4.1 설치 스크립트 (0) | 2019.06.20 |
---|---|
Java에서 double과 int를 비교하는 것이 유효합니까? (0) | 2018.04.26 |
uber jar는 무엇입니까? (0) | 2017.09.05 |
자바에서 표준 입력을 non-blocking으로 읽는 방법? (2) | 2016.03.07 |
Calendar 객체와 Esper의 EQL 관계에 관한 질문. (0) | 2014.07.15 |