ExternalTaskSensor 왜 사용할까? 세탁이 끝나고 나면 무엇을 해야할까? 아마도 빨래를 이쁘게 개어서 수납을 해야할 것이다(말리는 게 먼저겠지만 그건 건조기가 해줬다고 치고...) 당연하게도 세탁이 끝나지 않았다면 빨래를 개지도 못할 것이다. 따라서 빨래를 개는 작업은 세탁이 끝난 이후에 진행할 수 밖에 없다. 그래서 보통 세탁기를 돌려놓고 다른 일을 하다가 세탁기가 끝났다는 벨소리를 울리면 그 때 빨래를 갤 것이다(머리속에서 울리는 익숙한 LG 세탁기의 벨소리...) 왜 빨래 이야기를 이렇게 장황하게 할까? 오늘 말할 ExternalTaskSensor가 딱 이러한 프로세스에 사용되기 때문이다. 이름에서도 대충 알 수 있듯이 ExternalTaskSensor는 외부 태스크가 끝났는지를 감지하..
문제상황 빅쿼리는 다른 DB와 다르게 array 형태를 repeated 데이터 구조로 효율적으로 저장할 수 있다. (물론 다른 DB도 저장이 불가능한 것은 아니지만 권장하지는 않는다) 나 또한 array를 빅쿼리에 저장할 일이 있어 bigquery client를 이용하여 array를 저장하려고 하였는데, 이상하게 계속 빅쿼리에는 null로 적재가 되었다. 그런데 더 희한한 점은 로컬에서 테스트 하였을 때는 분명이 제대로 저장이 되었는데, 서버에서는 다시 null로 저장된다는 것이다. 해결방법 결론부터 말하자면 나는 csv 형태로 array를 저장하려고 하였는데, 이는 그리 좋은 방법이 아니다. csv 자체가 array에 그리 친화적이지 않고 빅쿼리 또한 csv 안에 있는 array를 인식하지 못한다고 한..
오류내용 빅쿼리에서 fstring을 이용해서 날짜값을 빅쿼리 SQL에 전달할 때 발생하는 오류 코드 def sql(date): f""" SELECT keyword, ncc_keyword_id, uploaded_date FROM `project.dataset.table` WHERE uploaded_date = DATE_ADD(DATE({date}), INTERVAL -5 DAY) """ ... 해결방법 실제 fstring에서는 문자열이 아닌 그냥 숫자형태로 들어가게 된다. 하지만 실제 빅쿼리에서 날짜는 따옴표 안에 넣어주어야 한다. 2022-08-23 -> "2022-08-23" 따라서 f"\"{date}\""와 같이 역슬래시를 이용해 이스케이프 문자로 따옴표를 함께 넣어서 전달해야한다.
동아리 발표자료로 만들었던 데이터 파이프라인 자료를 공유하려고 한다. 노션에서 티스토리로 옮기는 과정이 많이 복잡해서 일단은 노션 링크로 공유한 후 추후에 정리된다면 정식 블로그 글로 다시 포스팅하려고 한다. https://www.notion.so/e36d8125c3804f06a76abbd648d136a8 데이터 파이프라인 데이터 파이프라인 개요 www.notion.so
Chapter4. 빅데이터의 축적 데이터 수집 벌크형 데이터 전송: DB나 웹서버에서 SQL, API로 데이터를 추출하여 ETL 서버를 통해 분산 스토리지에 저장한다. 신뢰성이 중요한 경우에는 사용하면 좋다. 스트리밍형 데이터 전송: 다수의 클라이언트에서 지속적으로 작은 데이터가 전송된다. 메시지 큐와 메시지 브로커와 같은 중계 시스템을 이용하여 일정한 간격으로 모아서 분산 스토리지에 저장한다. 시계열 데이터 최적화 이벤트 시간: 실제 해당 데이터가 생성된 시간. 즉, 실제 분석의 대상이 되는 시간 프로세스 시간: 서버가 처리하는 시간 시계열 인덱스: 이벤트 시간에 대해 인덱스를 만들어 데이터 집계를 빠르게 실행할 수 있게 해주는 방법으로 카산드라와 같은 분산 데이터베이스를 이용할 수 있다. 비구조화 데..
GCS에서 빅쿼리로 데이터를 이관하는 작업을 하는 도중 현재 사용하고 있는 데이터 포맷에 대한 의문이 생겼다. 현재는 CSV 파일과 JSON 형태를 사용하고 있었는데, 이게 생각보다 용량을 차지하기도 하고, 특히 CSV 파일은 데이터 오염에 취약한 포맷이라는 이야기를 얼핏 들은 적이 있었다. 특히 데이터 용량 같은 경우 가난한 학생으로써 무료 크레딧을 이용하고 있는데, 생각보다 금방 금방 닳아가는 요금을 보면 가슴이 너무 아팠다. 그러던 중 예전에 하둡을 공부하다가 Parquet이라는 데이터 포맷 형태가 기억이 났고, 조금 더 효율적인 방법을 탐색해보기로 하였다. 우선 빅쿼리에 적재할 수 있는 형태가 크게 CSV, JSON, Parquet, AVRO 4가지로 나눠볼 수 있었다. 하나하나씩 특징을 알아보고..
🔎dbt를 써야할까? 데이터 엔지니어링 프로젝트를 진행하면서 dbt라는 도구를 알게 되었다. 대충 파이프라인 효율적으로 관리해주는 도구라는 이야기를 듣고, 이번 프로젝트에 한 번 사용해봐야겠다는 생각을 하였다. 하지만 dbt를 알아볼 수록 과연 정말 이 프로젝트에 필요할까는 생각이 계속 들었다. 데이터 엔지니어링에 필요한 여러 기술들을 경험해보자는 취지에서 프로젝트를 시작하긴 하였지만 오버엔지니어링이 아닐까 하는 생각이 들었다. 도입해야할 기술을 도입하지 않아서 힘든 상황도 좋지 않지만 나는 굳이 하지 않아도 될 일을 하는 오버엔지니어링이 더 두려운 사람이다. 기업이 최신 기술을 도입하는데 많은 비용이 드는 것처럼 나 또한 그것을 공부하는데 많은 시간이 들기 때문에 dbt보다 더 중요한 기술을 공부하는 ..
Chapter 1. 빅데이터 기초 지식 Hadoop: 대량의 데이터를 처리하기 위한 시스템 NoSQL: 분산 처리에 뛰어난 데이터베이스 => 'NoSQL에 저장하고, Hadoop으로 분산 처리' 데이터 파이프라인 데이터 웨어하우스: 대량의 데이터를 장기 보존하는데 최적화. -> ETL 데이터 마트: DW에서 필요한 데이터만 추출하여 시각화 도구와 조합. 데이터 레이크: DW처럼 가공하여 데이터를 저장하는 것이 아니라 원 데이터를 그대로 저장. Chapter2. 빅데이터의 탐색 크로스 테이블: 행 방향과 열 방향의 데이터가 교차. 트랜잭션 테이블: DB 형태의 테이블. 피벗 테이블: 소량의 데이터를 크로스 집계. MPP 데이터베이스: 빠른 데이터 접근을 위해 병렬 처리하는 데이터베이스. 아마존 Redshi..
개요 데이터 엔지니어 프로젝트를 진행하려고 여러 자료를 찾아보았는데, 많은 프로젝트에서 데이터 웨어하우스(이하 DW)를 구성하고 있었다. 그런데 예전부터 말만 들었지 정작 나도 DW를 구성하려고 하니 정확한 정의를 떠올릴 수가 없었다. 그래서 이참에 데이터 웨어하우스에 대한 정의를 명확히 하는 것이 좋겠다 싶어 정리를 해보려 한다. 참고로 해당 내용은 여러 프로젝트를 보다가 든 궁금증과 의문점들을 찾아 정리한 것이므로 순전히 나의 궁금증을 따라가며 정리되었음을 알린다 데이터 웨어하우스란 데이터 웨어하우스를 한 줄로 정의하면 다음과 같다. 데이터 웨어하우스는 조직 전체의 여러 소스로부터 데이터를 저장하고 처리하여 중요한 비즈니스 분석, 보고서 및 대시보드에 사용할 수 있는 의사결정 지원 시스템 해당 정의에..
Drill 스키마가 정해지지 않은 데이터에 대해 SQL 쿼리를 실행할 수 있다. HDFS, MongoDB, S3, Azure, GCP, JSON 등 다양한 파일 시스템의 상위에 위치할 수 있다. JDBC 드라이버를 통해 시각화 도구나 관계형 DB에 연결할 수 있다. 처리속도가 빠르지만 시스템에 설계되지 않은 상황에서는 효율적이지 않다. 다른 DB 테이블을 조인할 수 있다. Drill 쿼리 평점 데이터 Hive로 CREATE DATEBASE movielens; u.data 업로드 스파크를 통해 몽고디비에 데이터 적재 spark-submit --packages arg.mongodb.spark:mongo-spark-connenctor_2.11:2.0.0 MongoSpark.py Drill 설치 wget tar..