2014-03-25 2 views
2

나는 hadoop & 하이브를 가진 초보자입니다. hive-hadoop에있는 데이터베이스의 특정 행을 삭제하고 싶습니다. 나는 상자 밖에서 지원되지 않는 것을 알고 있으며, 그 hadoop은 읽기 전용 파일 시스템입니다. 나는 이것을 성취하는 최선의 방법이 무엇인지 궁금합니다. 이전에 누군가가 이것을 한 적이 있다면 그들이 학습/절차를 나눌 수 있습니까?하이브 hadoop 데이터베이스에서 행을 삭제하는 방법

감사합니다.

+0

[하이브의 레코드를 삭제하고 업데이트하는 방법] /stackoverflow.com/questions/17810537/how-to-delete-and-update-a-record-in-hive) – Neels

+0

당신은 아마 이것을 체크 아웃해야합니다 http://stackoverflow.com/questions/17810537/how-to- 하이브 레코드 삭제 및 업데이트 – Neels

답변

3

가장 좋은 방법은 드롭하려는 행이 파티션에있는 것처럼 데이터를 파티션하는 것입니다. 그런 다음 나머지 테이블에 영향을주지 않고 파티션을 삭제할 수 있습니다. 데이터 세트가 상당히 커질지라도 이것은 상당히 지속 가능한 모델입니다.

10

큰 데이터에는 실제로 삭제되지 않습니다. 즉, 너무 크지 않은 경우 테이블이나 파티션을 덮어 쓸 수 있으며 JamCon이 제안한 것처럼 특정 파티션으로 삭제를 격리 할 수 ​​있습니다. 너무 큰 아닌 데이터 세트에 대한

, 당신은

INSERT OVERWRITE TABLE mytable 
SELECT * FROM mytable 
WHERE ID NOT IN ('delete1', 'delete2', 'delete3'); 
1

처럼 뭔가를 할 수 또는 당신은 다른 테이블에 행 (즉, 당신이 원하는 그 유지하기 위해)의 나머지를 삽입 한 다음 이전을 드롭 수 표.

2

INSERT OVERWRITE TABLE mytable SELECT * FROM mytable WHERE 1 = 0;

위 쿼리는 먼저 덮어 쓰기 옵션이 쿼리에 지정되어 있으므로 데이터 파일을 먼저 삭제합니다. 다음은 테이블에서 레코드를 읽는 SELECT를 실행합니다. 조건이 실패 할 때 SELECT 쿼리는 레코드를 0으로 만들고 제로 레코드를 테이블에 삽입합니다.

관련 문제