휴가로 따뜻한곳에 왔는데 눈오고 춥고 난리라 디씨온게 레전드다 ㅋ

빡친김에 bigquery 에 대해서 글을 써볼까해
왜냐하면 뭔가 영양가 있는 글을 써보자 생각을 하고는 있었는데 뭘쓸까 생각하니 구글의 데이터 관련 테크 스택중 퍼블릭 클라우드로 일반 사용자들도 사용할 수 있는거기도 하고 sql이 접근성? 이 높아서 관심있는형들이 있지 않을까싶고
예전에 노래형이 관심있다고 댓글 달아줬었던 기억이기도하고

쓰면은 내용이 길어져서 여러편에 나눠서 쓸건데 첫 편 써보고 관심
있어하면은 계속쓰고 아니면은 말려고
길게 썼는데 저 색히 혼자말 왜 존나 길게 하고 지랄 그럼 좀 슬프잔아
근데 아마도 질문에 대답은 잘 안할거같아 모르는건 몰라서 아는거는 귀찬아서 ㅎ

일단 빅쿼리가 무엇인가 이딴건 안쓰려고 했었는데
보는 사람들도 재미없고 쓰는 나도 지겹고 그러니까는
하지만 나중에 쓸?(쓸지도 모를?)  글에서 이해를위해 필요한 중요한 개념들은 정리를 해두고 필요하면 링크거는게 낫지않을까 해서
쓸까해

1.bigquery란 무엇인가
빅쿼리는 dremel 이라는 논문에서도 발표한 구글 내부용 분석용 시스템을 바탕으로 퍼블릭하게 클라우드 서비스로 제공하는거야
파이어베이스니 구글 어낼리틱스니 하는것들의 데이터가 빅쿼리로 익스포트되어서 그래서 아는 사람들도 있는데 일단 빅쿼리는 gcp에 속하는 dw 서비스라고 보는게 맞고
예를 들어 latency가 중요한 포인트 쿼리나 특정 레코드 update같은 것이 아니라 throughput이 중요한 대량의 데이터를 한꺼번에 다 읽엇니 처리하는 분석 쿼리에 최적화되어있어
Latency가 몇십 밀리 세컨드 어쩌고 이런 요구사항을 위한 서비스가 아니란거야

쓰다보니까 지겹다 아는 형들은 귀에 못박히게 들었던 내용일거고
dw용 제품 특성 이런거는 너무 쉽게 찾을수가 있는 일반적인 내용이니까 있으니까 한번 찾아봐

근데 위에서 dw라고 이야기했지?
나 개인적으로는 전통적인 dw제품보다는 아파치 hive 같은 대용량 데이터 분석 시스템이 쿼리 엔진을 제공하는거랑 결이 같다고 생각해
Hive 써본 형들은 dw라고 말하면서 나왔는데 옛날에 dml도 지원 안되던 시절이 한참 있었던거를 기억할거야 이제 dml 지원한지도 오래됐네 제약사항들이 있긴하지만

빅데이터 플랫폼인데 dw 기능을 지원하는것 vs 전통적인 dw들이 확장성을 통해서  빅데이터 분석을 지원하는 것 은 결과적으로 기능만 나열하면 비슷해 보이지만 구체적으로 들어가면은 밑단에 깔린 시스템들의 설계나 철학들이 달라서 다른점이 있을수 있다는거를 이야기해주고 싶어

물론 hive랑 bigquery도 전혀 다른 제품들이고 동작방식도 달라
하지만 빅데이터 처리를위한 분산처리 시스템에서 sql엔진을 제공하는 목적에서 출발했다는 것은 결이 비슷하다고 개인적으로 생각하기에 예를 든거야

2.slot 이란 건 무엇인가
다른 hadoop hive나 redshift 같은거랑 다른 개념이라 일단 이거먼저 얘기하는게 좋을거같애
Bigquery는 일단 서버리스 서비스라서 redshift 같은 거랑은 다르게 서버들 클러스터를 사용자 입장에서 만드는 개념이 없어
그냥 gcp project안에 dataset 을 만들고 그 안에 table을 만들어
그리고 query를 돌리는건 데이터 스토리지랑은 따로의 개념이야
꼭 dataset이 있는 프로젝트에서 쿼리를 돌릴 필요가 없고 권한만 있으면은 다른 프로젝트에 있는 데이터를 대상으로 내 프로젝트에서 쿼리를 돌릴수있어
당연히 스토리지 비용은 데이터셋이 있는 프로젝트에 청구되고 쿼리 돌리는 비용은 쿼리를 돌린 프로젝트에 청구되곘지
이 비용에 관한것도 다음에 글을 쓰게 되면은 이야기하던지 말던지할게

그래서 이때 쿼리를 돌리기위해 쓰는 cpu와 메모리등의 리소스가 slot이야
하둡 mapreduce나 spark 써본 형들은 태스크에 최대 최소 리소스 설정하는거 익숙할거야 그거처럼 각  태스크별로 리소스 할당하는 개념이라고 보면되는데
여기서 하둡 mapreduce 나 스파크와 다른 점은 빅쿼리는 서버들 클러스터라는걸 따로 사용자가 만들지 않는다고  그랬지? 그래서 slot당 cpu나 메모리를 사용자가 설정할 필요가없어 할수도 없고
이 slot당 cpu나 메모리 사이즈도 일부러 구체적인 숫자는 제공을 안하고있어 사용자 입장에선 이걸 알아도 필요한 slot을 추정하는데 도움이 안되거든 이 slot 개수 추정은 다음에 글을 쓰게 되면은 이야기할게

그리고 job당 몆개의 slot을 사용하라는 설정을 할 필요없어 할 수도 없고 (이건 사실 slot reservation 이랑 쿼리 돌릴수 있는 권한과 gcp project등을 이용해 일정부분 흉내낼순 있는데 그것도 최대를 제한하는 정도이고 형들이 생각하는 리소스 할당이랑은 맞지 않을 가능성이 높아서 다음에 이야기하든가 말든가 할게)

일단 쿼리를 처리할때에 사용하는 slot의 수가  많다는거는 그만큼 태스크가 많아진거고 그 쿼리를 돌릴때 분산이 잘 되엇고 그래서 그렇지 않을 때보다 빨리 처리할 가능성이 높다는 이야기겠지? bigquery 쿼리 옵티마이저는 쿼리를 돌리면서 최대한 분산처리 시킬수 있는만큼 시키려고 노력을 해
근데 분산시스템 써본 형들은 알겠지만 작업특성이나 데이터 특성에따라서 이 분산이 잘 될수도 있고 그렇지않고 적은 수 또는 한 태스크에 몰릴수도 있어 (예를 들면 데이터 skew 라던지 order by에 limit이 없다던지 등) 그러면 쿼리 옵티마이저가 slot을 많이써서 분산처리하고싶어도 할 수 없고 하나또는 적은 수의 테스크에서 처리해야 되는 과정이 중간에 있을수가 있겠지

이 slot이라는 개념이 중요해서 각 job별로 slot 사용을 어떻게 모니터링을 할지,  과연 이 쿼리들은 slot contention 때문에 느린건지를 판단을 어떻게할지,  on demand 과금 방식일때나 flat rate 과금 방식의 차이점이나 flat rate일 때 slot reservation을 어떻게 설계할지 등등이 중요한 내용인데 이건 다음에 다른 글에서 (쓰게 되면은) 설명할게

쓰다보니까 글이 길어졌어
윈래 1편에서는 slot, partition, cluster까지 이야기 하려했는데 글이존나 길어져갖구 다음에 이어서 쓰는게나을거같아
위에서 말햇듯이 휴가라서 나가야 되기도 하고 사실 ㅎㅎ

물론 안 쓸수도 있고 ㅋ
혹시 관심있는 형들있고 시간되면은 쓸게

댓글은 아마 늦게야 볼듯 싶어

- dc official App