반응형
번역계기

https://www.slideshare.net/madvirus/ss-28761748

위 슬라이드를 보며 Hive에 관한 내용을 읽던 도중 제약 부분에 행 단위 수정/삭제 불가로 쓰여 있는 내용을 보았습니다. 더 자세히 알아보고 싶어 다음처럼 찾아보았고 번역을 하게 되었습니다.


출처 

https://stackoverflow.com/questions/17810537/how-to-delete-and-update-a-record-in-hive

저는 Hadoop, Hive, Hive JDBC를 설치하였습니다. 각자 잘 작동하고 있습니다. 하지만, 아직 문제가 있습니다. MySQL에서 사용하는 delete나 update 명령으로 Hive를 사용하여 하나의 레코드를 삭제하거나 갱신하는 방법이 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

반응형

+ Recent posts