본문 바로가기

partition7

[hive] hive standalone metastore 에서 Drop Partition 처리시 Caused by: java.lang.UnsupportedOperationException 오류가 발생하는 경우 하이브 스탠드얼론 메타스토어(apache-hive-metastore-3.1.2-bin) 에서 파티션 DROP 시점에 다음과 같은 오류가 발생하였습니다. Caused by: java.lang.UnsupportedOperationException at org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy.convertExprToFilter(DefaultPartitionExpressionProxy.java:34) at org.apache.hadoop.hive.metastore.PartFilterExprUtil.makeExpressionTree(PartFilterExprUtil.java:50) at org.apache.hadoop.hive.metas.. 2022. 8. 2.
[hive] MSCK is missing partition columns under location. 오류 해결 방법 EMR에서 하이브의 테이블에 MSCK 명령을 이용해서 테이블을 재구성할 때 다음의 오류가 발생하는 경우가 있습니다. Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: MSCK is missing partition columns under s3://bucket_name/directory_location 원인 이 오류는 지정한 버켓의 폴더가 없어서 발생하는 오류입니다. S3의 특성상 디렉토리만 생성되면 파일시스템에 따라서 $folder$ 가 생성되면서 이 특수 파일이 옮겨지는 과정에서 누락되면 이 오류가 발생합니다. 해결방법 이 오류는 디렉토리를 만들어서 해결할 수도 있고, 아래의 설정을 이용해서 오류가 있는 폴더는 무시하고 처리할 수 있도록 설정할.. 2019. 12. 4.
[hive] 하이브 테이블 조회시 파티션 개수 제약하기 하이브에서 테이블을 조회할 때 where 조건에 파티션 정보를 이용하면 하이브 메타스토어에서는 테이블의 파티션 정보를 가져와서 데이터를 조회할 로케이션을 설정합니다. 이때 MetaStoreDirectSql.java 에서 다음의쿼리를 이용하여 파티션 정보를 가져옵니다. 그런데 이때 파티션의 구간을 길게 잡아서 조회하는 파티션 개수가 많아지면 버퍼 오류가 발생하게 됩니다. select PARTITIONS.PART_ID from PARTITIONS inner join TBLS on PARTITIONS.TBL_ID = TBLS.TBL_ID and TBLS.TBL_NAME = "테이블명" inner join DBS on TBLS.DB_ID = DBS.DB_ID and DBS.NAME = "데이터베이스명" wher.. 2019. 5. 22.
[hive] 테이블의 파티션을 범위로 삭제(Drop)하는 방법 하이브 테이블의 파티션을 제거(drop)하는 문법은 다음과 같습니다. ALTER TABLE table_name DROP PARTITION(partition_name='partitions_value'); yyyymmdd 파티션을 가지는 table을 이용해서 삭제 방법을 알아보겠습니다. # table은 yyyymmdd 파티션을 가지고 있음 hive> show partitions table; OK yyyymmdd=20190220 yyyymmdd=20190221 yyyymmdd=20190222 yyyymmdd=20190223 yyyymmdd=20190224 yyyymmdd=20190225 yyyymmdd=20190226 yyyymmdd=20190227 yyyymmdd=20190228 yyyymmdd=201902.. 2019. 4. 1.
[hive] 테이블 파티션의 로케이션 정보 확인, 생성, 수정 방법 하이브 테이블의 로케이션과 파티션의 로케이션은 desc 명령으로 확인할 수 있고,파티션의 정보 수정 방법은 다음과 같습니다. # 테이블 정보 및 로케이션 확인 desc formatted [테이블명]; # 테이블의 파티션 목록 확인show partitions [테이블명]; # 신규 파티션 추가 ALTER TABLE [테이블명] ADD PARTITION (yymmdd='20180510'); # 파티션의 LOCATION 수정 ALTER TABLE [테이블명] PARTITION (yymmdd='20180510') SET LOCATION 'hdfs://127.0.0.1/user/'; # 파티션 삭제 ALTER TABLE [테이블명] DROP PARTITION (yymmdd='20180510'); 2019. 1. 17.
[hive] Fatal error occurred when node tried to create too many dynamic partitions 오류 처리 하이브에서 다음과 같은 오류가 발생하면 이는 다이나믹 파티션 처리중 생성가능한 파티션 개수 이상의 파티션이 생성되어서 발생하는 것이다. 아래 오류의 내용처럼 해당 설정을 늘여주면 된다. Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Error 20004]: Fatal error occurred when node tried to create too many dynamic partitions. The maximum number of dynamic partitions is controlled by hive.exec.max.dynamic.partitions and hive.exec.max.dynamic.partitions.pernode. .. 2018. 5. 11.
[hive][db] rank() 함수를 이용하여 그룹별로 상위 n개의 결과만 출력하는 방법 그룹별로 상위 n개의 데이터만 출력하는 방법은 윈도우 함수(window function) 중에서 RANK() 함수를 이용한다. RANK 함수는 ORDER BY를 포함한 쿼리에서 특정 칼럼의 순위를 구하는 함수이다. 아래와 같이 PARTITION BY, ORDER BY 를 함께 이용하여 그룹별로 순위를 구할 수 있고,이 순위를 이용하여 상위 n개의 결과만 출력이 가능하다. SQL> SELECT JOB, ENAME, SAL, RANK( ) OVER (ORDER BY SAL DESC) ALL_RANK, RANK( ) OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK FROM EMP; JOB ENAME SAL ALL_RANK JOB_RANK --------- ------.. 2017. 12. 27.