big query에서 파티션 컬럼을 사용하여 불필요한 부분을 읽지 않고 데이터를 가져옴으로써 비용과 성능을 최적화하는 부분은 많은 분들이 알고 계실 듯합니다.
위와 같이 파티션 컬럼을 이용할 경우 많은 이점을 가질 수 있지만 그렇게 하지 못하는 경우가 존재할 수 있습니다.
만약에 테이블에 날짜 컬럼이 여러 가지인데, 사용하고자 하는 날짜 컬럼이 파티션 되지 않은 경우가 다음과 같은 경우입니다. big query에서는 일반 RDB처럼 여러 개의 인덱스(파티션 칼럼)를 제공하지 않습니다. 그렇기 때문에 1개의 파티션 칼럼을 통해서 성능을 향상해야 하는데요. 이 경우 매우 난감한 상황이 발생합니다.
기준으로 하는 날짜 컬럼으로 값을 가져올 경우 데이터가 맞지 않는데 성능, 비용 때문에 이를 써야 하는 경우라면 이상한 데이터를 그대로 써야 하므로 말이 되지 않습니다. 그렇기 때문에 다음과 같은 방법을 통해서 데이터를 조회하면 성능, 비용을 모두 잡고 정확한 데이터를 가져올 수 있습니다.
이 방법은 다음과 같이 그림을 통해서 보면 이해가 빠릅니다.
위와 같이 데이터가 들어가 있다고 가정 해보고 2개의 날짜 컬럼은 다음과 같이 누적 됩니다.
TODAY 컬럼:2019-03-01,2019-03-02…같이 date형식으로 적재
LOGTIME컬럼(파티션 :2019-03-0112:30:20 와 같이 datetime 형식으로 적재
위의 내용을 참고해서 2020-02-25 ~ 2020-03-03까지의 일자별 건수 데이터를 집계하여 보여줘야 할 경우 어떻게 해야 할까요?