Gradle

코로나바이러스가 한창이다. 영화 컨테이젼을 보다가 gradle의 뜻을 깨달았다. 영화 마지막에 U2 노래가 흐르더라. ... from the cradle to the grave~

자바에서 쿠두 테이블에 레인지 파티션 추가하기

아파치 플룸(apache flume)의 기능을 확장시키는 플러그인을 개발하고 있다.
레디스(redis)에서 데이터를 가져와 플룸 채널(flume channel)에 데이터를 채우는 소스(source) 기능과 플룸 채널(flume channel)에서 데이터를 가져와 쿠두(kudu) 테이블에 저장하는 싱크(sink) 기능을 구현하는 중이다. 그런데 쿠두 테이블에 저장하려는 데이터에 해당하는 파티션이 생성되어 있지 않을 경우 익셉션이 발생한다. 이 문제를 해결하기 위해 필요한 경우 파티션을 코드에서 직접 추가하기로 하였다.

아래처럼 복수의 칼럼으로 레인지 파티션이 설정되어 있는 경우에는

PARTITION BY RANGE (year, month, day) (
  PARTITION VALUE = (2018, 10, 25),
  PARTITION VALUE = (2018, 10, 26),
  PARTITION VALUE = (2018, 10, 27),
  PARTITION VALUE = (2018, 10, 28)
)

다음과 같이 필요한 파티션을 추가해 준다.

    private void addRangePartitionsOnDemand()
    {
        logger.info("Add range partition on kudu table.");

        Schema schema = table.getSchema();
        PartialRow lower = schema.newPartialRow();
        PartialRow upper = schema.newPartialRow();

        lower.addInt("year", 2018);
        lower.addInt("month", 10);
        lower.addInt("day", 29);
        upper.addInt("year", 2018);
        upper.addInt("month", 10);
        upper.addInt("day", 30);

        try {
            client.alterTable(table.getName(), new AlterTableOptions().addRangePartition(lower, upper));
        } catch (KuduException e) {
            logger.error("New range partition conflicts with existing range partition", e);
        }
    }

테스트해 보니 2018년 10월 29일 파티션이 잘 생성되었다.

이 블로그의 인기 게시물

JavaScript의 Math.random() 대체

아마존 오더블 오디오북을 mp3로 저장하기