Hive 파티션 테이블에서 where 없는 쿼리 실행 방지
Hive 파티션 테이블에서 where 없는 쿼리 실행 방지
· Version : Hive
하이브에서 테이블 파티셔닝을 하는 가장 큰 이유는 빠르게 데이터를 검색하기 위해서이다. 아주 큰 데이터가 있더라도 파티션 스키마가 검색하려는 범위 필터링을 반영한다면 파티셔닝 테이블은 쿼리의 성능을 극적으로 올려준다. 그래서 특정값을 필터하는 WHERE 절에 파티션 조건을 포함하는데 이러한 조건을 “파티션 필터”라고 부른다.
그러나 파티셔닝이 잘 되어 있다고 하더라도, 테이블 데이터가 많거나 파티션 개수가 많다면 거대한 맵리듀스 작업을 유발할 수 있다. 이러한 맵리듀스의 부하를 방지하기 위해 WHERE 절에 파티션 필터가 없는경우 쿼리 실행이 되지 않도록 옵션을 설정할 수 있다.
아래 스크립트는 WHERE절에 파티션 필터가 없는경우 쿼리가 실행되지 않도록 적용한 예시이다.
hive> set hive.mapred.mode = strict; hive> select * from campaign; FAILED: SemanticException [Error 10056]: Queries against partitioned tables without a partition filter are disabled for safety reasons. If you know what you are doing, please set hive.strict.checks.no.partition.filter to false and make sure that hive.mapred.mode is not set to 'strict' to proceed. Note that you may get errors or incorrect results if you make a mistake while using some of the unsafe features. No partition predicate for Alias "campaign" Table "campaign" hive>
|
아래 스크립트는 WHERE 절에 파티션 필터가 없을 경우에도 쿼리가 실행된다.
hive> set hive.mapred.mode = nonstrict; hive> select * from campaign; OK Time taken: 0.671 seconds hive> |
현재 테이블에 생성되어 있는 파티션키 정보를 확인하려면 아래 명령을 실행한다.
hive> show partitions campaign; OK date_local=20200616 date_local=20200617 date_local=20200630 Time taken: 0.13 seconds, Fetched: 3 row(s) hive> |
2020-07-01 / Sungwook Kang / http://sungwookkang.com
Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, HDFS, 하둡 파일 시스템, Hive, 하이브, 하이브 테이블, Hive table, 하이브쿼리, Hive SQL, 하이브파티션, 파티션필터, partition filter