데이터 공부/데이터베이스 & SQL 18

[Bigquery 최적화] 구체화된 뷰 (MATERIALIZED VIEW) 테이블에 대하여

빅쿼리( bigquery ) 최적화 방법론을 고민하고 있다. 그러던 중, 예기치 못한 상황에서 'materialized view'에 대해서 알게 되었다. 현재는 view 테이블로 streaming 테이블을 연산하고 있는데, 이를 개선할 수 있지 않을까 싶었다. 결론적으로는, 구체화된 뷰를 결국 도입하진 않았다. 그 생각의 과정과, 도입할 수 없었던 이유 등을 간단히 작성해보려고 한다. 01. MATERIALIZED VIEW란? https://cloud.google.com/bigquery/docs/materialized-views-intro?hl=ko 구체화된 뷰 소개 | BigQuery | Google Cloud BigQuery 구체화된 뷰의 특성, 이점, 제한사항을 설명하고 캐싱, 예약된 쿼리, 표준 ..

MySQL CDC to Bigquery 환경에서 Soft Delete 를 권장해야 하는 이유

안녕하세요 한소희입니다. 공부를 통해 배운 내용을 작성하고 있습니다. 혹여 해당 포스팅에서 잘못된 부분이 있을 경우, 알려주시면 빠르게 수정 조치하도록 하겠습니다. 목차 소프트 딜리트 vs 하드 딜리트 Mysql CDC CDC와 Delete DataLake DataWarehouse DataLake와 Delete Bigquery와 Delete 01. 소프트 딜리트 vs 하드 딜리트 소프트 딜리트란, UPDATE 명령어를 사용하여 삭제 여부를 알수 있는 컬럼에 데이터가 삭제되었다는 값을 넣어 표현하는 삭제 방법이다. 하드 딜리트란, DELETE 명령어를 사용하여 특정 데이터를 삭제하는 삭제 방법이다. 쿼리로 비교하면 다음과 같다. 아래와 같은, 고객 테이블(테이블명: customer)이 있다고 가정하자. i..

MySQL Role 권한 설정

MySQL 8 버전에서 지원하는 role 기능에 대해서 소개해보고자 한다. 1. MySQL Role 이란? 2. MySQL Role 기본 쿼리 3. 조건 별 Role 권한 할당 1. MySQL Role 이란? 말 그대로 역할을 의미한다. 더 풀어서 설명하자면, 권한을 모아 둔 역할이다. 마치 '학생은 다른 학생들의 개인 정보를 볼 수 없다.', '선생님은 본인 반에 한하여 학생 정보를 볼 수 있다.'와 같이, 각자의 role에 맞는 역할이 있는 것과 같다. 이를 통해 집합에 대한 권한을 한번에 설정 및 관리할 수 있으므로, 사용자에 대한 권한 관리 및 운영이 더욱 수월해지게 된다는 장점이 있다. 1-1. Role 생성 순서 및 구조 즉, role 을 생성하고 & role에 권한을 할당하고 & 이로써 특정..

MySQL 의 UPSERT 쿼리

공부를 통해 배운 내용을 작성하고 있습니다. 혹여 해당 포스팅에서 잘못된 부분이 있을 경우, 알려주시면 빠르게 수정 조치하도록 하겠습니다. MySQL 쿼리는 UPSERT 명령어가 별도로 존재하지 않는다. 하지만 INSERT ... ON DUPLICATE KEY UPDATE 문을 통해 UPSERT 문을 구현할 수 있다. 나처럼 UPSERT 쿼리에 대해 익숙하지 않은 분들을 위해, 구현하면서 배운 몇 가지 사항을 정리해보려고 한다. 목차 MySQL 의 UPSERT 문 UNIQUE KEY vs PRIMARY KEY CREATE DATE, UPDATE DATE 컬럼 설정 01. MySQL 의 UPSERT 문 UPSERT 란, UNIQUE 인덱스 또는 PRIMARY KEY 와 동일한 값이 있는 데이터가 기존에 ..

01. 신뢰할 수 있고 확장 가능하며, 유지보수하기 쉬운 애플리케이션

지난주부터, '데이터 중심 애플리케이션 설계'라는 책을 스터디하기 시작했다. 책을 읽으며, 중요하다고 생각하는 부분에 대해 짧게 요약정리(+약간의 개인적 생각이 들어간...) 해보고자 한다. 이번 포스팅에서는 첫 챕터인, "01. 신뢰할 수 있고 확장 가능하며 유지 보수하기 쉬운 애플리케이션" 부분을 다뤄 보았다. 목차 1. 신뢰성 2. 확장성 3. 유지보수성 01. 신뢰성 신뢰성이란, 결함이 발생해도 시스템이 올바르게 동작하게 만드는 것을 말한다. 결함률이 0이 되도록 설계하는 것은 불가능하다. 오히려, 결함이 발생하더라도 결함으로 인한 장애가 발생하지 않도록 내결함성을 갖추게 설계하는 것이 좋다. (보안 이슈는 제외) 내결함성을 갖추도록 설계하면, 특정 유형의 결함이 발생하였을 경우 사용자에게 결함을..

Redis - Node.js 연동 - 127.0.0.1 이 아닌 다른 host 로 연결하는 방법

앞서, node js에 redis를 연동하는 방법 + 트러블 슈팅에 대해 포스팅을 했었다. Redis - Node.js 연동 - ClientClosedError: The client is closed 나는 업무 상 redis 를 node js 애플리케이션에 연동해서 수행해야 할 테스트 작업이 있었다. 사실 js 를 잘 다루지 못하지만, 해당 방법에 대해서는 구글링 시 많은 자료가 나오므로 비교적 손쉽게 eng-sohee.tistory.com 나는 GCP memorystore Redis ( = Cloud Redis)에 연결해야 했다. 하지만 연동 과정에서, 127.0.0.1 을 제외한 다른 host로 연결이 안 된다는 이슈가 발생했다. 나는 client configuration 문서를 통해, socket을..

Redis - Node.js 연동 - ClientClosedError: The client is closed

나는 업무 상 redis 를 node js 애플리케이션에 연동해서 수행해야 할 테스트 작업이 있었다. 사실 js 를 잘 다루지 못하지만, 해당 방법에 대해서는 구글링 시 많은 자료가 나오므로 비교적 손쉽게 연동을 할 수가 있었다. 내가 처음에 참고한 블로그는 아래와 같다. https://zzdd1558.tistory.com/232 [Node.js] Node + Redis 연동 후 테스트 Node.js 서버와 Redis를 연동하여 나중에 공부해볼 Redis Session관리를 하기전에 Node 서버와 Redis가 연동이 되어야 하기 때문에 Node와 Redis연동하는 방법을 알아보도록 하겠습니다 . 먼저 Node.js에서 redis zzdd1558.tistory.com 하지만 해당 내용을 참고하며 진행할 ..

06. SQL - SubQuery 활용 방법 (A.K.A 4주차 수업 정리 (1))

SubQuery란? 큰 쿼리문 안에 들어가 있는 쿼리문을 말한다. 테이블 간 Join 작업인데, 더욱 복잡한 명령을 수행한 뒤 Join을 행할 수 있기 때문에 매우 중요한 개념이다. 1-1. Join이 아닌 SubQuery도 사용해야 하는 이유 - Join과 SubQuery 비교 만약, kakaopay로 결제한 user의 id, email, name을 보여달라는 명령을 수행해본다고 가정해본다. 이는 Join을 이용해서 (저번 시간에 배웠던 대로) 문제를 해결할 수 있다. 하지만, 만약 Join해야 할 테이블에 조건을 걸어야 하는 것이 복잡해진다면, join을 쓰기에는 역부족일 수 있다. 이럴 때 SubQuery를 사용한다. SubQuery를 이용한다면 더욱 간단히 문제를 해결할 수 있다. 01. Join..

08. 에러 해결 방법 Error running query: SELECT list expression references column _PARTITIONTIME which is neither grouped nor aggregated

GCP Bigquery에서 해당 코드를 실행하는 데 아래와 같은 에러가 발생했다. 에러 코드 SELECT count(*) as count, date(_PARTITIONTIME) as partition_date FROM `데이터 보관 경로` WHERE DATE(_PARTITIONTIME) in (SELECT distinct DATE(_PARTITIONTIME) as partitiontime FROM `goodmorning-4f4f0.diff_datalist.diff_currentStreak` order by partitiontime desc limit 7) AND result = 'false' GROUP BY date(_PARTITIONTIME) ORDER BY partition_date ❓❗ 에러 살펴보..

07. 스파르타 코딩클럽 - SQL 강의 완강 후기!

안녕하세요 한소희입니다. 공부를 통해 배운 내용을 작성하고 있습니다. 혹여 해당 포스팅에서 잘못된 부분이 있을 경우, 알려주시면 빠르게 수정 조치하도록 하겠습니다. 감사합니다. 벌써 한 달이 지났다. 드디어 스파르타 코딩 클럽 SQL 수업을 완강했다. 한 주차도 미루지 않고 꾸준히 들은 결과, 시간 내에 완강할 수 있었다. 따라서 개인적으로 너무 뿌듯하다. 완강을 기념으로, 오늘은 스파르타 코딩클럽의 SQL 수업에 대한 느낀 점 및 회고를 진행해보고자 한다. (※ 광고가 아님을 알려드립니다!) 목차 강의를 통해 배운 점 스파르타 코딩클럽의 장단점 할인 코드 공유 01. 강의를 통해 배운 점 SQL의 기초인 where 절부터, 난이도 있는 문법인 subquery까지 배울 수 있었다. 강의를 들으며 정리한 ..