1.Database Normalizaion
- DB를 조직적이고 일관된 방법으로 디자인 → 데이터 정합성 유지, 수정/적재/삭제 용이
- 사용되는 개념 → Primary key, Composite key, Foregin key
- 1NF(First Normal Form)
- 2NF(Second Normal Form)
- 일단 1NF 만족
- Primary Key 중심으로 의존결과 알 수 있어야함
- 부분적인 의존도 x → 모든 부가 속성들은 Primary Key를 가지고 찾을 수 있어야함
- 3NF(Third Normal Form)
- 2NF 만족
- 전이적 부분 종속성 없어야함
- Slowly Changing Dimensionsl
- DW, DL에서 모든 테이블의 히스토리를 유지하는 것이 중요함
- 보통은 두개의 timestamp 필드
- create_time
- update_time
2.DBT(Data Build Tool)
- 소개
- ELT용 오픈소스: In-warehouse data transformation
- dbt Labs 라는 회사가 상용화 → Analytics Engineer라는 말 만듦
- 다양한 DW 지원
- Redshift, Snowflake, Bigquery, Spark
- 클라우드 버전도 존재 → dbtCloud
- git 연동가능, SQL 지식 필요
- raw data를 한번 정리해서 ELT
- 그냥 할때보다 시간이 들지 몰라도 한번 더 본다는 장점
- 데이터 모델(models) → data lineage 추적 가능, data discovery tool
- 입력 데이터(seeds)
- 데이터 체크(tests)
- 스냅샷(snapshots)구성
- 사용 시나리오(요구조건)
- 모델링 변경 사항을 이해하기 쉽고 필요하다면 롤백 가능
- 모델간 종속성이 명확(리니지) 하고 검색 가능
- 데이터 품질 테스트
- 에러 보고
- Fact 테이블의 증분 로드
- Dimension 테이블 변경 추적(히스토리 테이블)
- 쉽게 접근 가능한 문서
- DBT models
- model: ELT 테이블을 만드는데 기본이 되는 빌딩블록
- 테이블이나 뷰의 형태로 존재
- models 폴더 밑에 SQL 파일로 존재
- 기본적으로 SELECT + 템플릿과 매크로
- 다른 테이블들 사용가능 → 이를 통해 리니지 파악
- 기본적으로 입력 데이터 정의
- CTE (Common Table Expression)
WITH tableA AS (
SELECT * FROM DW1.tableB
)
SELECT
a,
b,
c
FROM
tableA
- OUTPUT 4가지의 Materialization 종류
- View: 데이터를 자주 사용하지 않는 경우, 피지컬하게 DB에 존재
- Table: 데이터를 반복해서 자주 사용하는 경우, 피지컬하게 DB에 존재
- Incaremental: Table Appends, Fact 테이블, 과거 레코드를 수정할 필요가 없는 경우
- Ephemeral: CTE, 한 SELECT에서 자주 사용되는 데이터를 모듈화하는데 사용
- Tests
- 내장 일반 테스트(”Generic”)
- unique, not_null, accepted_values, relationships 등
- models 폴더
- 커스텀 테스트(”SIngular”)
- 기본적으로 SELECT로 간단하며 결과가 리턴되면 “실패”로 간주
- tests 폴더
- 내장 일반 테스트(”Generic”)
- DBT Snapshots
- Dimension 테이블은 성격에 따라 변경이 자주 발생
- ex) 사용자 정보, 상품 정보
- 히스토리 정보를 만들어야 함 → 과거의 그 시점에 테이블을 보고자(과거로 롤백)
- 조건: 데이터 소스가 primary key 있어야 하고 + 레코드 변경시간을 나타내는 타임스탬프 필요
- 위의 조건 만족해야 스냅샷 기능
- Dimension 테이블은 성격에 따라 변경이 자주 발생
3.커리어 및 이력서
- 잡 타이틀로 찾기 vs 아는 기술로 찾기 → 기술로 찾는게
- 경력 상관없이 지원
- 이력서
- 이력서에 첫번째 장에는 스킬셋에 관련된게 있어야함
- 한번이라도 써본거 스킬 다쓰기 → 면접가서 어느정도 쓰는지
- 기술별로 카테고리화 해서 적기
- programming languages: Python, Pyspark, Julia, R
- Database: MySQL, Redshift
- Cloud: AWS, Hive
- Productivity Tools: Jenkins, VScode, Jupyter Notebook, Slack, Notion, Jira, Git, Mermaid
- 이력서 커버레터 굳이 불필요한 페이지 하나 더 있는거
- 데이터 경력 쓸게 많으면 데이터와 관련 없는 과거 경력 넣을 필요 없음
- 행동양식 질문
- Collaboration
- 다른 팀에 속한 다수의 사람들과 했던 프로젝트에 대해서 이야기 해주세요
- 지금까지 가장 같이 일하기 힘들었던 사람들은 누구고 왜 힘들었냐
- Ownership
- 프로젝트 중에 문제가 생겼는데 주도적으로 해결한 경우가 있냐
- 프로젝트를 처음부터 끝까지 진행한 경우가 있다면 설명
- Impact
- 가장 임팩트가 컸던 프로젝트에 대해 설명해 달라
- Craftsmanship
- 맡은 일을 더 잘 하기 위해서 취했던 행동 그리고 그로 인해 좋은 결과가 나온 케이스 있다면 설명
- 위의 네 질문을 받으면 상황/업무/액션/결과(STAR, situation, task, action, result)
- Collaboration
- 어떤 질문을 해야할까?
- 좋은 질문은 면접관의 생각을 바꿀 수 있음!
- 미리 회사를 검색해 무엇을 하는 곳인지 찾아볼 것
- 면접관이 자기 소개를 할때 잘 듣고 그에대해 짧게 질문해볼 것
- 추천질문 예시
- hiring manager에게 처음에 무슨 일을 하게 되나?
- 지금 진행중인 중요한 프로젝트가 있는지?
- 지금 일을 잘 하는 사람들은 어떤 특징을 갖고 있는지?
- 지금 회사에서 제일 좋았던 점 그리고 안좋았던 점 설명 해주실수 있나요?
- 회사는 어떻게 수익창출을 하고있는지?
- 지금 사용중인 데이터 관련 기술 스택에 대해 설명해주실 수 있나요?
- 좋은 질문은 면접관의 생각을 바꿀 수 있음!
- 직장 선택 기준
- 성장성
- 회사 크기보다는 회사가 성장하고 있는지
- 사람/문화
- 회사내에 inner circle이 존재하는지?
- 존재한다면 내가 들어가서 일을 잘해도 그 안에 끼지 않는 한 인정받기 쉽지 않음
- 안에 들어가서 일을해보거나 잘 아는 지인이 회사에 있지 않은한 알기 힘듦
- 존재한다면 회사가 더 큰 성장을 이루는 것이 쉽지 않음
- 회사내에 inner circle이 존재하는지?
- 내 매니저
- 보고 배울점이 많은 사람인가? → 나이스한 것을 이야기 하는게 아님.
- 윤리적이고 공정한 사람이며 명확한 결정을 내리고 피드백을 잘 주는지?, 회사내에서 힘이 있는 사람인지?
- 좋은 매니저랑 일을 하면 나중에 큰 도움이 됨
- 매니저가 가는 회사 따라가기
- 이 사람이라면 지금 어떻게 했을까?
- 성장성
300x250
반응형
'Data Engineering > 프로그래머스 study 11기' 카테고리의 다른 글
[프로그래머스] 데이터 엔지니어 study - 7주차 (0) | 2023.02.26 |
---|---|
[프로그래머스] 데이터 엔지니어 study - 4주차 (0) | 2023.02.10 |
[프로그래머스] 데이터 엔지니어 study - 3주차 (0) | 2023.02.01 |
[프로그래머스] 데이터 엔지니어 study - 2주차 (0) | 2023.01.17 |
[프로그래머스] 데이터 엔지니어 study - 1주차 (0) | 2023.01.07 |