이번에는 지난글에이어서 빅쿼리 기본 개념중 내가 개인적으로 중요하다고 생각하는 개념들중에 slot은 지난 글에서 이야기했고 이번에는 테이블 파티션과 클러스터링에 관해 이야기해볼거야
3. 테이블 파티셔닝이란건 무엇인가
이거 일반적으로 굉장히 많이 쓰이는 파티션 그 개념 맞아
테이블 풀 스캔을 피하고 파티션 값 같은 애들끼리먼 모아 놓아서 이 파티션 칼럼에 조건을 걸면 메타 데이터를 보고 해당하지 않는 파티션들은 아예 스캔에서 빼버리는거
쿼리뿐만이 아니고 데이터 관리할때 테이블 대상 명령에 파티션 데코레이터를 붙여서 특정 파티션에 load 하거나 파티션을 drop해 버리거나 할 수도 있어
나중에 dml이랑 컨커런시 컨트롤 얘기 할 때 파티션이 중요한 역할을 해
지난번에 이어서 또 아파치 hive에 비유하면 하이브의 dynamic 파티션과 유사한데 다른점들이 있어
이 다이나믹 파티션 최대 개수같은걸 설정할 수 있는 하이브와는 다르게 bigquery는 구글에서 정해 ㅋ 옛날에는 테이블당 1000 개 였다가 지금은 테이블당 4000 개인가 할거야
그리고 여러 타입의 칼럼을 파티션으로 쓸수있고 한 테이블에 여러개의 파티션을 쓸수있는 하이브와는 다르게 한 테이블당 한개만 쓸 수 있고 타입도 제한적이야
어떤 타입을 쓸 수있는지는 gcp 문서를 찾아봐 그 문서를 복붙하고 싶지는 않아서 ㅋ
아 그리고 미디엄이었나 블로그 글 중 파티션 온 애니타입인가 하는 글이 있는데 읽어보면 해쉬값따서 int range로 넣으란 이야기임 ㅋ
그래서 이 파티션 개수 제한이 아마 하이브나 임팔라 쓰다가 넘어오는 형들한테는 좀 힘든 부분일텐데 보통 gcp 문서에서는 내가 다음에 얘기할 테이블 클러스터링으로 풀라고 권장하긴해
근데 테이블 클러스터는 파티션과 다르게 좀 사용자 입장에서 칼같이 컨트롤? 할 수 있는 부분이 아니라서 예를 들어 특정 클러스터만 익스포트한다거나 그런게 안돼
그래서 그럴 경우엔 부득이하게 테이블들을 나눠서 테이블 샤딩하고 와일드카드 쿼리를 하는 경우도 있는데 사실 파티셔닝이나 클러스터링에비해 메타데이터 오버헤드도 있고해서 gcp 문서에서 별 권장하는 방법은 아니지만 그렇다고 못쓸 방법은 또 아니라서 ㅋ
이건 클러스터링이 요구사항에 안 맞고 칼같이 나눠갖고 관리해야 겠다 싶으면은 생각해 볼 수도 있는 방법중 하나야
또 한가지 말하고 싶은거는 테이블 생성할때 파티션 지정을 해 줘야지 만들어진 테이블에 업데이르로 파티션을 지정한다던가 하는 방법은 지금응 없어
문서 찾아보면은 파티션 추가하는 방법이라고 하고 테이블 익스포트한다음에 파티션 있는 테이블 만들고 임포트하라 뭐 그런류 이야기 하고있어 ㅋ
원래 테이블 클러스터링도 같이 쓰려고 했는데 피곤하기도하고 너무 길어지면은 읽는 사람들집중도도 떨어져서 다음에 쓰게되면은 그때 쓸게
- dc official App
님네 회사는 빅쿼리에 1w당 얼마태움?
빅쿼리 주제로 계속 쓸 예정이면 GA bigquery 어케하면 젤 싸게 쓸수있는지나 알려주삼
비용관련해서는 나중에 쓸거같아 아니면 안 쓸지도 모르지만 ㅎ - dc App
저도 회사가 없어서 딱히 돈을 내고 빅쿼리를 쓰진 않아요
역시 그렇게 관심을 많이 가지는 토픽은 아닌거같음 - dc App
머냐 그럼 이제 안 쓰는 거임? 아쉽노
쓰려고 ㅋ - dc App