1. Redshift 론치 데모

  • aws에서 AWS Redshift 클러스터 생성
  • 실습용이기 때문에 가장 저렴한 dc2.large 선택
  • 노드는 1개
  • 샘플 데이터 X
  • 추가 구성 기본값 사용 해제
    • 네트워크 및 보안에서 퍼블릭 액세스 가능 선택!
      -> colab에서 액세스 가능

Error InvalidClusterSubnetGroupStateFault

Vpc associated with db subnet group does not exist. 오류 발생

  • Redshift - [구성] 에서 서브넷 그룹 생성해야함!

https://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/managing-cluster-subnet-group-console.html 참고


2. 예제 테이블 - 웹서비스 사용자/세션 정보

  • 사용자 ID : 보통 웹서비스에서 등록된 사용자마다 부여하는 유일한 ID
  • 세션 ID : 세션마다 부여되는 ID
    • 세션 : 사용자의 방문을 논리적인 단위로 나눈 것
      • 사용자가 외부 링크를 타고 오거나 직접 방문해서 올 경우 세션을 생성
      • 사용자가 방문 후 30분간 interaction이 없다가 뭔가를 하는 경우 새로 세션을 생성
    • 하나의 사용자는 여러 개의 세션을 가질 수 있음
    • 보통 세션의 경우 세션을 만들어낸 접점(경유지)을 채널이라는 이름으로 기록해 둠
      • 마케팅 관련 기여도 분석을 위함
    • 세션이 생긴 시간도 기록
  • 이 정보를 기반으로 다양한 데이터 분석과 지표 설정 가능
    • 마케팅 / 사용자 트래픽 관련
    • 일주일 / 월 별 Active User 차트
    • 마케팅 채널 기여도 분석

3. SQL 기본

  • 다수의 SQL문을 실행한다면 세미콜론으로 분리 필요
  • 주석
    • -- : 인라인 한 줄짜리 주석
    • /* */ : 여러 줄에 걸쳐 사용 가능한 주석
  • SQL 키워드는 대문자를 사용한다든지 하는 나름의 포맷팅 필요
    • 팀플이라면 팀에서 사용하는 공통 포맷 필요
  • 테이블/필드 이름의 명명 규칙 정하는 것이 중요
    • 단수형 vs. 복수형
      • User vs. Users
    • _ vs. CamelCasing
      • user_session_channel vs. UserSessionChannel

4. 데이터를 다룰 때 기억할 점

  • 현업에서 깨끗한 데이터란 존재하지 않음
    • 항상 데이터를 믿을 수 있는지 의심할 것!
    • 실제 레코드를 몇 개 살펴보는 것 만한 것이 없음!
  • 데이터 일을 한다면 항상 데이터의 품질을 의심하고 체크하는 버릇이 필요함
    • 중복된 레코드들 체크하기
    • 최근 데이터의 존재 여부 체크하기 (freshness)
    • Primary Key Uniqueness가 지켜지는지 체크하기
    • 값이 비어있는 컬럼들이 있는지 체크하기
    • 위의 체크는 unit test 형태로 만들어 매번 쉽게 체크해볼 수 있음
  • 어느 시점이 되면 너무 많은 테이블들이 존재하게 됨
    • 중요 테이블들이 무엇이고, 그것들의 메타 정보를 잘 관리하는 것이 중요해짐
    • 회사가 작을 때부터 규칙을 잘 만드는 것이 중요
  • 그 시점부터는 Data Discovery 문제들이 생겨남
    • 무슨 테이블에 내가 원하고 신뢰할 수 있는 정보가 들어있나?
    • 테이블에 대해 질문을 하고싶은데 누구에게 해야하나?
  • 이 문제를 해결하기 위한 다양한 오픈소스와 서비스들이 출현
    • DataHub (LinkedIn), Amundsen (Lyft), …
    • Select Star, DataFrame, …

5. Colab에서 사용

  • 주피터 SQL 엔진 설정
%load_ext sql

# ID, PW 설정
%sql postgresql://[id]:[pw]@[cluster].[host]:[port]/[db]


  • sql문 작성
%%sql

SELECT *
FROM raw_data.user_session_channel
LIMIT 10;
userid	      sessionid	                channel
184	c41dd99a69df04044aa4e33ece9c9249	Naver
251	0a54b19a13b6712dc04d1b49215423d8	Facebook
744	05ae14d7ae387b93370d142d82220f1b	Facebook
265	4c4ea5258ef3fb3fb1fc48fee9b4408c	Naver
45	60131a2a3f223dc8f4753bcc5771660c	Youtube
262	761efc843ff05ab74ed358713dd51c1b	Organic
702	8c97dbeee3b0d40ced7f514b99a93d93	Instagram
113	7f2cba89a7116c7c6b0a769572d5fad9	Organic
788	a8c6dd982010fce8701ce1aef8a2d40a	Google
645	593906af0d138e69f49d251d3e7cbed0	Youtube

connection error

  • Google Colab의 SQLAlchemy 버전이 업그레이드되면서 충돌 발생
  • 다운그레이드 필요
  • 아래 코드 실행 후 런타임 재실행
!pip install ipython-sql==0.4.1
!pip install SQLAlchemy==1.4.49

6. Pandas와 연동

result = %sql SELECT * FROM raw_data.user_session_channel
df = result.DataFrame()