주형권
-
안녕하세요. 주형권입니다. 지난번에 썼던 데이터 엔지니어를 준비하거나 이제 막 시작 하는 분들에게 글이 인기가 꽤 많아서 2탄을 준비 하였습니다. 데이터 엔지니어를 준비하거나 이제 막 시작 하는 분들에게안녕하세요.데이터 엔지니어 주형권입니다. 오늘은 보편적인(?) 이야기를 하려고 합니다. 데이터 엔지니어를 준비하시거나 데이터 엔지니어를 이제 막 시작하신 분들에게 드리는 이야기입니다burning-dba.tistory.com 링크드인의 조회수가 10,000을 넘어서 11,000을 달리고 있어서 꽤 인기가 많이 있습니다. 기술적인 이야기보다는 확실히 범용적인 이야기가 인기가 많은 거 같습니다. 그리고 많은 분들이 공감을 해주셨고 많은 메시지와 문의가 있었습니다. 그래서 그 인기(?)에 힘입어 2탄을 준비하였습..
데이터 엔지니어를 준비하거나 이제 막 시작 하는 분들에게 2탄안녕하세요. 주형권입니다. 지난번에 썼던 데이터 엔지니어를 준비하거나 이제 막 시작 하는 분들에게 글이 인기가 꽤 많아서 2탄을 준비 하였습니다. 데이터 엔지니어를 준비하거나 이제 막 시작 하는 분들에게안녕하세요.데이터 엔지니어 주형권입니다. 오늘은 보편적인(?) 이야기를 하려고 합니다. 데이터 엔지니어를 준비하시거나 데이터 엔지니어를 이제 막 시작하신 분들에게 드리는 이야기입니다burning-dba.tistory.com 링크드인의 조회수가 10,000을 넘어서 11,000을 달리고 있어서 꽤 인기가 많이 있습니다. 기술적인 이야기보다는 확실히 범용적인 이야기가 인기가 많은 거 같습니다. 그리고 많은 분들이 공감을 해주셨고 많은 메시지와 문의가 있었습니다. 그래서 그 인기(?)에 힘입어 2탄을 준비하였습..
2024.12.03 -
안녕하세요. 데이터엔지니어 주형권입니다.어느덧 Databricks를 맡고 운영한 지 5개월 정도가 흘렀습니다. 초반에 데이터 아키텍처와 정책을 잡고 서서히 물리적인 데이터를 운영 함에 있어서 꼭 알아야 하는 개념이 무엇일까 하다가 2가지 내용이 있어서 공부 겸 찾아보고 개념을 정리하였습니다. 위의 2개의 작업은 Databricks를 운영 하면서 필수적인 내용이므로 꼭 해줘야 하는 작업으로 보입니다. 정확히는 Optimize에 z-Ordering이 포함(?)인 것으로 옵션입니다. 하지만 할 때 같이 해주는 게 성능에 큰 영향을 미치는 것으로 보입니다. 개념과 함께 실제로 실행했을 때 알아야 하는 내용에 대해서도 공유하고자 합니다. Databricks의 테이블과 데이터 파일 처리 원리Databricks에 ..
[Databricks] Optimize / VACUUM안녕하세요. 데이터엔지니어 주형권입니다.어느덧 Databricks를 맡고 운영한 지 5개월 정도가 흘렀습니다. 초반에 데이터 아키텍처와 정책을 잡고 서서히 물리적인 데이터를 운영 함에 있어서 꼭 알아야 하는 개념이 무엇일까 하다가 2가지 내용이 있어서 공부 겸 찾아보고 개념을 정리하였습니다. 위의 2개의 작업은 Databricks를 운영 하면서 필수적인 내용이므로 꼭 해줘야 하는 작업으로 보입니다. 정확히는 Optimize에 z-Ordering이 포함(?)인 것으로 옵션입니다. 하지만 할 때 같이 해주는 게 성능에 큰 영향을 미치는 것으로 보입니다. 개념과 함께 실제로 실행했을 때 알아야 하는 내용에 대해서도 공유하고자 합니다. Databricks의 테이블과 데이터 파일 처리 원리Databricks에 ..
2024.12.02 -
안녕하세요. 주형권입니다. 지난번에 Teams 메시지 전송에 이어서 이번에는 조금 더 다체로운(?) 형태로 메시지를 보낼 수 있는 방법을 찾던 와중에 Teams 채널에서 특정 유저를 멘션하는 부분에 대해서 글을 작성 하였습니다. 기존의 Power Automate Workflow 세팅 및 앞 부분의 사항은 다음의 글을 참고 부탁 드립니다. [Teams] Python에서 Power Automate Workflow을 이용한 Teams 메시지 전송안녕하세요. 주형권입니다. 최근에 Python을 통해서 특정 상황에서 Teams 채널에 메시지를 전송 할때 다음과 같이 알림이 발생하여 다른 방법으로 보내는 방법을 찾는 과정을 정리하였습니다. 이burning-dba.tistory.com 앞의 부분은 생략하고 Power..
[Teams] Python에서 Power Automate Workflow을 이용한 유저 멘션안녕하세요. 주형권입니다. 지난번에 Teams 메시지 전송에 이어서 이번에는 조금 더 다체로운(?) 형태로 메시지를 보낼 수 있는 방법을 찾던 와중에 Teams 채널에서 특정 유저를 멘션하는 부분에 대해서 글을 작성 하였습니다. 기존의 Power Automate Workflow 세팅 및 앞 부분의 사항은 다음의 글을 참고 부탁 드립니다. [Teams] Python에서 Power Automate Workflow을 이용한 Teams 메시지 전송안녕하세요. 주형권입니다. 최근에 Python을 통해서 특정 상황에서 Teams 채널에 메시지를 전송 할때 다음과 같이 알림이 발생하여 다른 방법으로 보내는 방법을 찾는 과정을 정리하였습니다. 이burning-dba.tistory.com 앞의 부분은 생략하고 Power..
2024.08.24 -
안녕하세요. 주형권입니다.요즘 Databricks를 사용하면서 WebUI를 통해서 하다가 답답함과 여러 기능을 손쉽게 사용하기 위해서 DBeaver를 연결 사용 방법을 하다가 방법을 발견하여 공유드립니다. 물론 공식문서에서 제공하긴 하지만 설명이 불친절(?)하여 제가 정리하였습니다. 저는 Azure Databricks와 DBeaver 통합이란 글을 보고 설정하였습니다. Databricks 공식 가이드와 동일하지만 한글이 지원되므로 보기 더욱 편합니다. Azure Databricks와 DBeaver 통합 - Azure DatabricksAzure Databricks와 함께 DBeaver를 사용하는 방법을 알아봅니다. DBeaver는 개발자 및 데이터베이스 관리자를 위한 오픈 소스 데이터베이스 도구입니다...
[Databricks] DBeaver 연결 방법안녕하세요. 주형권입니다.요즘 Databricks를 사용하면서 WebUI를 통해서 하다가 답답함과 여러 기능을 손쉽게 사용하기 위해서 DBeaver를 연결 사용 방법을 하다가 방법을 발견하여 공유드립니다. 물론 공식문서에서 제공하긴 하지만 설명이 불친절(?)하여 제가 정리하였습니다. 저는 Azure Databricks와 DBeaver 통합이란 글을 보고 설정하였습니다. Databricks 공식 가이드와 동일하지만 한글이 지원되므로 보기 더욱 편합니다. Azure Databricks와 DBeaver 통합 - Azure DatabricksAzure Databricks와 함께 DBeaver를 사용하는 방법을 알아봅니다. DBeaver는 개발자 및 데이터베이스 관리자를 위한 오픈 소스 데이터베이스 도구입니다...
2024.07.24 -
안녕하세요. 주형권입니다.2부에서 3부로 넘어오는 시간이 조금 길었습니다. 개인적인 일이 매우 많아서 글 쓸 시간이 없다 보니 3부를 시작하는데 시간이 오래 걸렸습니다. 3부는 본격적으로 데이터를 데이터 환경을 구성하는 실제 개발 과정에 대한 경험과 방법에 대해서 다루려고 합니다. 물론 자세한 코드나 기법에 대해서는 부족 할 수 있으나 어느 정도 고민 하는 부분을 해결해주는 수준에서는 큰 도움이 될 것 같습니다. 그리고 3부에 들어가기 앞서 2부의 내용을 한번 더 숙지하고 비교하면서 읽어 보시면 아주 큰 도움이 될 것 같습니다. [공통] 나혼자 데이터환경 구성 - 제 2부안녕하세요. 주형권입니다. 제1부 - warming-up에 이어서 두 번째 이야기입니다. 두 번째 이야기는 데이터 환경을 구성하기 ..
[공통] 나혼자 데이터환경 구성 - 제 3부안녕하세요. 주형권입니다.2부에서 3부로 넘어오는 시간이 조금 길었습니다. 개인적인 일이 매우 많아서 글 쓸 시간이 없다 보니 3부를 시작하는데 시간이 오래 걸렸습니다. 3부는 본격적으로 데이터를 데이터 환경을 구성하는 실제 개발 과정에 대한 경험과 방법에 대해서 다루려고 합니다. 물론 자세한 코드나 기법에 대해서는 부족 할 수 있으나 어느 정도 고민 하는 부분을 해결해주는 수준에서는 큰 도움이 될 것 같습니다. 그리고 3부에 들어가기 앞서 2부의 내용을 한번 더 숙지하고 비교하면서 읽어 보시면 아주 큰 도움이 될 것 같습니다. [공통] 나혼자 데이터환경 구성 - 제 2부안녕하세요. 주형권입니다. 제1부 - warming-up에 이어서 두 번째 이야기입니다. 두 번째 이야기는 데이터 환경을 구성하기 ..
2024.04.09 -
안녕하세요. 주형권입니다.제1부 - warming-up에 이어서 두 번째 이야기입니다. 두 번째 이야기는 데이터 환경을 구성하기 위해서 하는 준비 과정을 작성하였습니다. "생각보다 그냥 하면 되는 거 아니야?"라고 생각할 수 있지만 준비할 게 정말 많습니다. 저 같은 경우 사람들을 설득시키는 과정이 굉장히 힘들었고 인식을 바꾸는 과정이 가장 어려웠던 거 같습니다. 물론 사람의 입장의 차이가 모두 있고 팀의 사정이 저마다 다르기에 우리의 일을 모두 좋게 바라볼순 없습니다. 또한 여러 가지 이해관계가 엮여 있으므로 당연히 풀어야 하는 문제입니다. 무조건 우리 쪽의 입장만 들어주고 데이터를 만들어준다면 정말 편하겠지만 상대방의 입장과 상대방의 팀의 입장이 있고 변경하기 어려운 점이 분명히 존재하므로 여러 가..
[공통] 나혼자 데이터환경 구성 - 제 2부안녕하세요. 주형권입니다.제1부 - warming-up에 이어서 두 번째 이야기입니다. 두 번째 이야기는 데이터 환경을 구성하기 위해서 하는 준비 과정을 작성하였습니다. "생각보다 그냥 하면 되는 거 아니야?"라고 생각할 수 있지만 준비할 게 정말 많습니다. 저 같은 경우 사람들을 설득시키는 과정이 굉장히 힘들었고 인식을 바꾸는 과정이 가장 어려웠던 거 같습니다. 물론 사람의 입장의 차이가 모두 있고 팀의 사정이 저마다 다르기에 우리의 일을 모두 좋게 바라볼순 없습니다. 또한 여러 가지 이해관계가 엮여 있으므로 당연히 풀어야 하는 문제입니다. 무조건 우리 쪽의 입장만 들어주고 데이터를 만들어준다면 정말 편하겠지만 상대방의 입장과 상대방의 팀의 입장이 있고 변경하기 어려운 점이 분명히 존재하므로 여러 가..
2023.12.27 -
안녕하세요. 주형권입니다. 최근에 범용적인 글을 많이 쓰고 있고 경험을 공유하는 글을 많이 작성하고 있는데요. 이런 글을 많이 쓰다 보니 기존에 했었던 노하우(?)를 공유해 달라는 요청이 몇 개 있어서 제가 전에 다녔던 G사에서 구성하였던 데이터 환경을 어떻게 구성하였는지 정리해 볼까 합니다. 이미 퇴사한 회사라서 회사명을 언급하진 않겠으나 G사면 어디인지 다들 아실 거라 생각합니다. 회사에서 팀장이였는데 데이터엔지니어링팀에 저 혼자였고 1인 팀장이었습니다... 그래서 혼자서 구축하였으니 제가 했던 게 전부라고 할 수 있겠네요. 아마도 이 글은 스타트업에 혼자서 데이터 환경을 어떻게 구성해야 할지 고민인 분들에게 많은 도움이 될 것으로 보입니다. 또한 이 글은 기존의 여러 가지 글을 짜깁기 하여 쓴 글..
[공통] 나혼자 데이터환경 구성 - 제 1부안녕하세요. 주형권입니다. 최근에 범용적인 글을 많이 쓰고 있고 경험을 공유하는 글을 많이 작성하고 있는데요. 이런 글을 많이 쓰다 보니 기존에 했었던 노하우(?)를 공유해 달라는 요청이 몇 개 있어서 제가 전에 다녔던 G사에서 구성하였던 데이터 환경을 어떻게 구성하였는지 정리해 볼까 합니다. 이미 퇴사한 회사라서 회사명을 언급하진 않겠으나 G사면 어디인지 다들 아실 거라 생각합니다. 회사에서 팀장이였는데 데이터엔지니어링팀에 저 혼자였고 1인 팀장이었습니다... 그래서 혼자서 구축하였으니 제가 했던 게 전부라고 할 수 있겠네요. 아마도 이 글은 스타트업에 혼자서 데이터 환경을 어떻게 구성해야 할지 고민인 분들에게 많은 도움이 될 것으로 보입니다. 또한 이 글은 기존의 여러 가지 글을 짜깁기 하여 쓴 글..
2023.12.26 -
안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성하였을 당시의 연차가 2년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 들어가며... NULL은 RDB에서 개념을 정확하게 알고 있어야 합니다. NULL은 공백이 아닙니다. 그래서 NULL을 포함하냐? 하지 않냐? 는 굉장히 중요합니다. 데이터엔지니어, 데이터분석가 두 직업을 하면서도 분명히 알고 있어야 합니다. 그래서 꼭 RDB의 NULL이 아니더라도 BigQuery , Redshift 등의 모든 데이터를 SQL을 사용하는 곳에서 NULL은 알고 있어야 합니다. 또한 NULL의 경우 취급 방식이..
[MSSQL] NULL 비교안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성하였을 당시의 연차가 2년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 들어가며... NULL은 RDB에서 개념을 정확하게 알고 있어야 합니다. NULL은 공백이 아닙니다. 그래서 NULL을 포함하냐? 하지 않냐? 는 굉장히 중요합니다. 데이터엔지니어, 데이터분석가 두 직업을 하면서도 분명히 알고 있어야 합니다. 그래서 꼭 RDB의 NULL이 아니더라도 BigQuery , Redshift 등의 모든 데이터를 SQL을 사용하는 곳에서 NULL은 알고 있어야 합니다. 또한 NULL의 경우 취급 방식이..
2023.12.12 -
들어가며 안녕하세요. 주형권입니다. 오늘은 저연차 주니어 분들에게 도움이 될 것 같은(?) 글을 작성하려고 합니다. 제가 주니어 시절에 많은 시니어 분들께서 강조하셨고 가르쳐 주셨던 내용을 여러분께 정리하여 공유 드리고자 합니다. 저의 링크드인을 보면 아시겠지만 저는 이직을 꽤 여러번 하였습니다. 물론 자의가 아닌 타의(회사가 망...)로 회사를 옮긴적도 여러 번 있지만 이직을 여러 번 경험 한 저에게는 한 가지 습관이 있습니다. 누구나 자신만의 업무 스타일이 있고, 연차가 오래될수록 그 업무 스타일은 습관으로 굳어지는 것 같습니다. 여러가지 업무 스타일이 있지만 유독 이 부분은 제가 강점이라고 생각합니다. 누군가에게는 별것 아니라고 들을 수 있지만 제가 여러 회사를 옮기면서 느꼈지만 별게 맞습니다. 왜..
데이터 엔지니어인 내가 새롭게 입사 하는 회사에서 하는 것들어가며 안녕하세요. 주형권입니다. 오늘은 저연차 주니어 분들에게 도움이 될 것 같은(?) 글을 작성하려고 합니다. 제가 주니어 시절에 많은 시니어 분들께서 강조하셨고 가르쳐 주셨던 내용을 여러분께 정리하여 공유 드리고자 합니다. 저의 링크드인을 보면 아시겠지만 저는 이직을 꽤 여러번 하였습니다. 물론 자의가 아닌 타의(회사가 망...)로 회사를 옮긴적도 여러 번 있지만 이직을 여러 번 경험 한 저에게는 한 가지 습관이 있습니다. 누구나 자신만의 업무 스타일이 있고, 연차가 오래될수록 그 업무 스타일은 습관으로 굳어지는 것 같습니다. 여러가지 업무 스타일이 있지만 유독 이 부분은 제가 강점이라고 생각합니다. 누군가에게는 별것 아니라고 들을 수 있지만 제가 여러 회사를 옮기면서 느꼈지만 별게 맞습니다. 왜..
2023.10.19 -
안녕하세요. 주형권입니다. 최근에 계속해서 AWS환경에서 Iceberg를 이용한 데이터 ELT를 하고 있다 보니 AWS 관련하여 많은 것을 하고 있습니다. ELT 파이프라인을 모두 손수 만들다 보니 AWS Iceberg의 테이블에 데이터를 직접적으로 넣기 어려웠고 이런저런 내용을 찾다 보니 awswrangler라는 SDK를 발견하여 소개 하고자 합니다. awswrangler SDK는 복잡하지 않고 단순히 아래의 과정으로 데이터를 Iceberg에 넣습니다. 데이터를 Python에 dataframe 형태로 만들었다가 S3에 parquet로 내리고 그 데이터를 Iceberg에 Import 합니다. 또한 awsrangler는 다음의 파라미터를 받아서 사용합니다. 위에는 굉장히 많은 파라미터가 있는데 저는 저기서..
[AWS] awswrangler안녕하세요. 주형권입니다. 최근에 계속해서 AWS환경에서 Iceberg를 이용한 데이터 ELT를 하고 있다 보니 AWS 관련하여 많은 것을 하고 있습니다. ELT 파이프라인을 모두 손수 만들다 보니 AWS Iceberg의 테이블에 데이터를 직접적으로 넣기 어려웠고 이런저런 내용을 찾다 보니 awswrangler라는 SDK를 발견하여 소개 하고자 합니다. awswrangler SDK는 복잡하지 않고 단순히 아래의 과정으로 데이터를 Iceberg에 넣습니다. 데이터를 Python에 dataframe 형태로 만들었다가 S3에 parquet로 내리고 그 데이터를 Iceberg에 Import 합니다. 또한 awsrangler는 다음의 파라미터를 받아서 사용합니다. 위에는 굉장히 많은 파라미터가 있는데 저는 저기서..
2023.08.07 -
안녕하세요. 주형권입니다. 지난번에 개발한 GS리테일의 데이터레이크 모니터링 시스템 도베르만에 추가적인 기능을 만들어서 만드는 과정에 대해서 공유하려고 글을 작성하였습니다. 기존에 모니터링 시스템에 관련된 글은 링크를 들어가시면 볼 수 있습니다. https://burning-dba.tistory.com/162 [DataLake] 데이터레이크 운영 시스템 도입기 안녕하세요. 주형권입니다. 2023년 6월 30일 기준으로 어느덧 GS리테일에 입사한 지 2달을 넘었습니다. 현재 잘 적응하고 있으며 입사 이후에 정말 많은 것들을 만들고 있습니다. 이번 글은 그 첫 burning-dba.tistory.com 들어가기에 앞서 GCP 환경과 AWS 환경에서 모두 데이터 시스템을 만들고 운영 해본 입장에서 확실히 GC..
[Athena] Query 사용량 및 사용자 추적 대시보드 만들기안녕하세요. 주형권입니다. 지난번에 개발한 GS리테일의 데이터레이크 모니터링 시스템 도베르만에 추가적인 기능을 만들어서 만드는 과정에 대해서 공유하려고 글을 작성하였습니다. 기존에 모니터링 시스템에 관련된 글은 링크를 들어가시면 볼 수 있습니다. https://burning-dba.tistory.com/162 [DataLake] 데이터레이크 운영 시스템 도입기 안녕하세요. 주형권입니다. 2023년 6월 30일 기준으로 어느덧 GS리테일에 입사한 지 2달을 넘었습니다. 현재 잘 적응하고 있으며 입사 이후에 정말 많은 것들을 만들고 있습니다. 이번 글은 그 첫 burning-dba.tistory.com 들어가기에 앞서 GCP 환경과 AWS 환경에서 모두 데이터 시스템을 만들고 운영 해본 입장에서 확실히 GC..
2023.07.28 -
안녕하세요. 주형권입니다. AWS의 boto3를 이용하여 데이터 레이크 운영을 위한 개발을 하던 와중에 제목과 같은 에러를 발견하고 해결 방법에 대해서 정리 하였습니다. 우선 국내 블로그 및 외국 블로그에도 정확하게 나온 곳이 없어서 도움이 될 것 같아서 빠르게 글을 작성 하였습니다. 무엇을 하려고 하였는가? 저희는 AWS 환경에서 데이터레이크를 구축하고 있는 만큼 boto3를 정말 많이 씁니다. 그렇게 하다보니 boto3의 여러가지 기능에 대해서 많이 사용하고 있는데요. 그중에 CloudTrail에 관련하여 boto3를 통해서 데이터를 가져오려고 하였습니다. trail = boto3.client('cloudtrail') boto3에서 CloudTrail을 가져오는 방법이 여러가지가 있는데, 이중에 lo..
[boto3] Your pagination token does not match your request안녕하세요. 주형권입니다. AWS의 boto3를 이용하여 데이터 레이크 운영을 위한 개발을 하던 와중에 제목과 같은 에러를 발견하고 해결 방법에 대해서 정리 하였습니다. 우선 국내 블로그 및 외국 블로그에도 정확하게 나온 곳이 없어서 도움이 될 것 같아서 빠르게 글을 작성 하였습니다. 무엇을 하려고 하였는가? 저희는 AWS 환경에서 데이터레이크를 구축하고 있는 만큼 boto3를 정말 많이 씁니다. 그렇게 하다보니 boto3의 여러가지 기능에 대해서 많이 사용하고 있는데요. 그중에 CloudTrail에 관련하여 boto3를 통해서 데이터를 가져오려고 하였습니다. trail = boto3.client('cloudtrail') boto3에서 CloudTrail을 가져오는 방법이 여러가지가 있는데, 이중에 lo..
2023.07.27 -
안녕하세요. 주형권입니다. 최근에 개발을 다하고 시간이 조금 남아서 개발하면서 몇 가지 만났던 부분에 대해서 글을 많이 쓰게 되었습니다. 지금은 ELT 파이프라인을 개발하고 있는데요. 저 같은 경우 주로 Airflow를 통해서 스케줄 처리를 하고, PythonOperator를 이용해서 Python Class를 불러와서 데이터를 처리하는 구조로 ELT 파이프라인을 만듭니다. 이렇게 만들면 제가 입맛데로 원하는 가공을 할 수도 있고 여러 가지 기능을 제가 원하는 방향으로 넣을 수 있어서 PythonOperator를 선호하고 있습니다. 이 ELT 파이프라인은 조만간 정리하여 글을 쓰도록 하겠습니다. (거의 완성되었습니다.) 무엇을 하려고 하였는가? Airflow에 Connection에 Oracle 서버를 등록..
[Airflow] oracle connection 등록 후 python으로 부르기안녕하세요. 주형권입니다. 최근에 개발을 다하고 시간이 조금 남아서 개발하면서 몇 가지 만났던 부분에 대해서 글을 많이 쓰게 되었습니다. 지금은 ELT 파이프라인을 개발하고 있는데요. 저 같은 경우 주로 Airflow를 통해서 스케줄 처리를 하고, PythonOperator를 이용해서 Python Class를 불러와서 데이터를 처리하는 구조로 ELT 파이프라인을 만듭니다. 이렇게 만들면 제가 입맛데로 원하는 가공을 할 수도 있고 여러 가지 기능을 제가 원하는 방향으로 넣을 수 있어서 PythonOperator를 선호하고 있습니다. 이 ELT 파이프라인은 조만간 정리하여 글을 쓰도록 하겠습니다. (거의 완성되었습니다.) 무엇을 하려고 하였는가? Airflow에 Connection에 Oracle 서버를 등록..
2023.07.20 -
안녕하세요. 주형권입니다. 현재 회사에서 AWS 기반의 환경에서 Athena Iceberg(이하 Iceberg)를 이용하여 Data Lake를 구축하고 있습니다. Iceberg 테이블에 데이터를 마이그레이션 하거나 ELT를 할때 다음과 같은 오류가 발생 하여서 간략하게 글을 써봅니다. 무슨 오류가 발생 하였는가? TOO_MANY_OPEN_PARTITIONS : Exceeded limit of 100 open writers for partitions/buckets 다음과 같이 파티션이 100개 이상 쓸 수 없다고 나오는데요. 이는 INSERT 및 UPDATE , MERGE등에서 모두 발생 하였습니다. 어떻게 해결 하였는가? 이 부분은 해결 방법이 없습니다... 공식 홈페이지에 내용이 나오긴 하는데, 단순히..
[Athena] TOO_MANY_OPEN_PARTITIONS안녕하세요. 주형권입니다. 현재 회사에서 AWS 기반의 환경에서 Athena Iceberg(이하 Iceberg)를 이용하여 Data Lake를 구축하고 있습니다. Iceberg 테이블에 데이터를 마이그레이션 하거나 ELT를 할때 다음과 같은 오류가 발생 하여서 간략하게 글을 써봅니다. 무슨 오류가 발생 하였는가? TOO_MANY_OPEN_PARTITIONS : Exceeded limit of 100 open writers for partitions/buckets 다음과 같이 파티션이 100개 이상 쓸 수 없다고 나오는데요. 이는 INSERT 및 UPDATE , MERGE등에서 모두 발생 하였습니다. 어떻게 해결 하였는가? 이 부분은 해결 방법이 없습니다... 공식 홈페이지에 내용이 나오긴 하는데, 단순히..
2023.07.13 -
안녕하세요. 주형권입니다. 2023년 6월 30일 기준으로 어느덧 GS리테일에 입사한 지 2달을 넘었습니다. 현재 잘 적응하고 있으며 입사 이후에 정말 많은 것들을 만들고 있습니다. 이번 글은 그 첫 번째 프로젝트에 대해서입니다. 저는 어느 회사를 가던지 무조건 처음에 하는 작업이 있습니다. 바로 모니터링 시스템을 만드는 작업입니다. 데이터엔지니어를 5년 정도 하면서 많은 실무자들이 개발 베이스로 일을 하다 보니 운영에 대해서 경험이 없는 경우가 많고 어떠한 것을 만들어야 할지 어떻게 만들어야 할지 모르는 경우가 매우 많았습니다. 운영이 생각보다 신경 쓸게 많고, 많은 지식을 요하는 경우가 있어서 쉬운 부분이 아닙니다. 그래서 이러한 노하우(?)를 공유하고 어떻게 도입하였는지 공유하여 많은 분들께서 도움..
[DataLake] 데이터레이크 운영 시스템 도입기안녕하세요. 주형권입니다. 2023년 6월 30일 기준으로 어느덧 GS리테일에 입사한 지 2달을 넘었습니다. 현재 잘 적응하고 있으며 입사 이후에 정말 많은 것들을 만들고 있습니다. 이번 글은 그 첫 번째 프로젝트에 대해서입니다. 저는 어느 회사를 가던지 무조건 처음에 하는 작업이 있습니다. 바로 모니터링 시스템을 만드는 작업입니다. 데이터엔지니어를 5년 정도 하면서 많은 실무자들이 개발 베이스로 일을 하다 보니 운영에 대해서 경험이 없는 경우가 많고 어떠한 것을 만들어야 할지 어떻게 만들어야 할지 모르는 경우가 매우 많았습니다. 운영이 생각보다 신경 쓸게 많고, 많은 지식을 요하는 경우가 있어서 쉬운 부분이 아닙니다. 그래서 이러한 노하우(?)를 공유하고 어떻게 도입하였는지 공유하여 많은 분들께서 도움..
2023.06.30 -
안녕하세요. 주형권입니다. 이직을 하고 최근에 AWS 환경에서 DataLake를 구축하다보니 AWS 기반의 작업을 많이 하고 있습니다. 저 같은 경우 회사를 옮기면 우선 모니터링부터 만들고 시작하니, 초반에 모니터링에 관련 된 여러가지 글을 작성하게 되었습니다. 이 글에서 나오는 내용은 Python의 boto3의 LakeFormation의 list_permissions를 이용하였습니다. 추출 결과값 Name(Kor) boto3 dict result Key Name describe 유저 ID (arn) DataLakePrincipalIdentifier (string) An identifier for the Lake Formation principal. 권한 리스트 Permissions (list) The ..
[LakeFormation] python boto3 list_permissions 기반 모든 permissions 추출안녕하세요. 주형권입니다. 이직을 하고 최근에 AWS 환경에서 DataLake를 구축하다보니 AWS 기반의 작업을 많이 하고 있습니다. 저 같은 경우 회사를 옮기면 우선 모니터링부터 만들고 시작하니, 초반에 모니터링에 관련 된 여러가지 글을 작성하게 되었습니다. 이 글에서 나오는 내용은 Python의 boto3의 LakeFormation의 list_permissions를 이용하였습니다. 추출 결과값 Name(Kor) boto3 dict result Key Name describe 유저 ID (arn) DataLakePrincipalIdentifier (string) An identifier for the Lake Formation principal. 권한 리스트 Permissions (list) The ..
2023.05.18 -
안녕하세요. 주형권입니다. Redshift에 관련하여 오랜만에 글을 작성하는거 같습니다. 최근 입사한 회사에서 Redshift를 사용하려고 하고 있어서 여러가지 테스트를 하는 와중에 오류를 발견하고 해결하는 과정에서 여러가지 삽질(?)을 경험하고 쉽게 해결하는 방법을 찾아서 공츄 차원에서 글을 작성 하였습니다. 🤔 무엇을 하려고 하였는가? Redshift의 COPY를 이용하여 S3에 Parquet 형태로 저장된 데이터를 Redshift 테이블에 입력하고자 하였습니다. COPY의 경우 테이블을 만들면서 들어가는 경우는 지원하지 않는것 같고 이미 있는 테이블에 INSERT만 지원하는 것으로 보였습니다. 그래서 최초에 테이블을 만들어줘야 하는데요. Glue 카탈로그를 이용하여 Athena에 있는 데이터의 DD..
[Redshift] error: Spectrum Scan Error code: 15007안녕하세요. 주형권입니다. Redshift에 관련하여 오랜만에 글을 작성하는거 같습니다. 최근 입사한 회사에서 Redshift를 사용하려고 하고 있어서 여러가지 테스트를 하는 와중에 오류를 발견하고 해결하는 과정에서 여러가지 삽질(?)을 경험하고 쉽게 해결하는 방법을 찾아서 공츄 차원에서 글을 작성 하였습니다. 🤔 무엇을 하려고 하였는가? Redshift의 COPY를 이용하여 S3에 Parquet 형태로 저장된 데이터를 Redshift 테이블에 입력하고자 하였습니다. COPY의 경우 테이블을 만들면서 들어가는 경우는 지원하지 않는것 같고 이미 있는 테이블에 INSERT만 지원하는 것으로 보였습니다. 그래서 최초에 테이블을 만들어줘야 하는데요. Glue 카탈로그를 이용하여 Athena에 있는 데이터의 DD..
2023.05.16 -
안녕하세요. 해당 글을 MySQL 문법을 사용 하였습니다. 지난번에 Query를 통해서 Airflow의 스케줄 시간을 파싱 하는 글을 작성하였는데요. ( 바로가기 ) 이번에는 파싱하여 일반 사용자가 보기 편하게 나타내는 Query를 만들었습니다. 위와 같이 Crontab시간을 사용자가 보기 편한 형태로 보여 주도록 하였습니다. 아무래도 규치적을 주고 파싱을 하다 보니 영어 표현과 어순이 조금 어색하거나 안 맞는 경우가 있습니다. 이 부분은 감안해 주세요. (도저히.. 어떻게 바꿀지 모르겠습니다.) SELECT schedule_interval ,CASE WHEN schedule_interval = '"@once"' THEN 'Schedule once and only once' WHEN schedule_in..
[Airflow] 스케줄 시간 (Crontab) Query 파싱안녕하세요. 해당 글을 MySQL 문법을 사용 하였습니다. 지난번에 Query를 통해서 Airflow의 스케줄 시간을 파싱 하는 글을 작성하였는데요. ( 바로가기 ) 이번에는 파싱하여 일반 사용자가 보기 편하게 나타내는 Query를 만들었습니다. 위와 같이 Crontab시간을 사용자가 보기 편한 형태로 보여 주도록 하였습니다. 아무래도 규치적을 주고 파싱을 하다 보니 영어 표현과 어순이 조금 어색하거나 안 맞는 경우가 있습니다. 이 부분은 감안해 주세요. (도저히.. 어떻게 바꿀지 모르겠습니다.) SELECT schedule_interval ,CASE WHEN schedule_interval = '"@once"' THEN 'Schedule once and only once' WHEN schedule_in..
2023.05.03 -
안녕하세요. 데이터엔지니어 주형권입니다. 오랜만에 꽤나 길고 범용적인 주제에 관해서 글을 쓰려고 합니다. 많은 회사에서 데이터를 활용하여 많은 업무를 하고 데이터를 이용해서 많은 의사결정을 하고 있습니다. 그러면서 데이터의 양도 방대하고 종류도 꽤나 다양해졌습니다. 제가 처음에 일할 때는 RDB(Relational Database)에서 발생하는 데이터만 주로 다루었습니다. 하지만 최근에는 너무도 많고 너무도 다양한 데이터를 이용해서 의사결정과 업무를 진행합니다. 하지만 데이터가 아무리 다양하고 많아져도 RDB에서 발생하는 트랜잭션 데이터는 절대적으로 필요합니다. 그렇기에 RDB에서 데이터를 가져오는 것은 절대로 필요하다고 볼 수 있습니다. 회원 데이터 또는 빌링 데이터등은 무결성이 무조건이기 때문에 RD..
[ETL] RDB에서 데이터 ETL을 위한 최소한의 테이블 설계안녕하세요. 데이터엔지니어 주형권입니다. 오랜만에 꽤나 길고 범용적인 주제에 관해서 글을 쓰려고 합니다. 많은 회사에서 데이터를 활용하여 많은 업무를 하고 데이터를 이용해서 많은 의사결정을 하고 있습니다. 그러면서 데이터의 양도 방대하고 종류도 꽤나 다양해졌습니다. 제가 처음에 일할 때는 RDB(Relational Database)에서 발생하는 데이터만 주로 다루었습니다. 하지만 최근에는 너무도 많고 너무도 다양한 데이터를 이용해서 의사결정과 업무를 진행합니다. 하지만 데이터가 아무리 다양하고 많아져도 RDB에서 발생하는 트랜잭션 데이터는 절대적으로 필요합니다. 그렇기에 RDB에서 데이터를 가져오는 것은 절대로 필요하다고 볼 수 있습니다. 회원 데이터 또는 빌링 데이터등은 무결성이 무조건이기 때문에 RD..
2023.02.02 -
BigQuery에서 가끔씩 Error: 80324028이 발생하면서 실행이 실패하는 경우가 있습니다. 이러한 현상을 구글링 해봤으나 별다른 성과가 없었으며, Slack overflow에서만 몇몇 답글이 달렸지만 해결방법은 없고 대부분이 "아마도 그럴 것이다?"라는 추측이었습니다. 무슨 작업을 했을 때 발생 하였는가? 그래서 몇 가지 의심 가는 정황을 포착해서 여러 가지 테스트를 해보았는데, 현재는 발생하지 않고 있습니다. 제가 하려던 작업은 ETL 작업이었고 Python Operator를 이용해서 작업을 부르고 그 안쪽에 BigQuery의 Query를 수행하는 작업이 몇 개 있었습니다. 대략 이러한 작업이었습니다. 이러한 여러 번의 Query를 수행하는 작업이 순차적으로 수행됩니다. drop_query ..
[BigQuery] Error: 80324028 발생 시 해결BigQuery에서 가끔씩 Error: 80324028이 발생하면서 실행이 실패하는 경우가 있습니다. 이러한 현상을 구글링 해봤으나 별다른 성과가 없었으며, Slack overflow에서만 몇몇 답글이 달렸지만 해결방법은 없고 대부분이 "아마도 그럴 것이다?"라는 추측이었습니다. 무슨 작업을 했을 때 발생 하였는가? 그래서 몇 가지 의심 가는 정황을 포착해서 여러 가지 테스트를 해보았는데, 현재는 발생하지 않고 있습니다. 제가 하려던 작업은 ETL 작업이었고 Python Operator를 이용해서 작업을 부르고 그 안쪽에 BigQuery의 Query를 수행하는 작업이 몇 개 있었습니다. 대략 이러한 작업이었습니다. 이러한 여러 번의 Query를 수행하는 작업이 순차적으로 수행됩니다. drop_query ..
2023.01.16 -
안녕하세요. 오랜만에 BI 관련해서 글을 작성합니다. 최근에 회사에서 Data Studio를 통해서 BI를 만들기 시작하면서 다시 한번 Data Studio를 통해서 BI를 만들기 시작하였습니다. 그리고 Data Studio가 Looker Studio로 명칭이 변경되었습니다. 하지만 아직도 Data Studio로 이름이 많이 불리고 있어서 Data Studio라고 글을 작성하였습니다. "채워진 지도" 지표는 Data Studio에서 구글맵을 이용하여 지도를 제공하며 기본적으로 Data Studio에서 제공하는 지표입니다. 구글맵답게 "로드 뷰" , "항공 뷰"등의 여러 가지 기능을 제공합니다. 지난번에 작성하였던 지하철 노선도 지표 그리기가 위경도를 이용하여 데이터를 표현하였다면 이번에는 지역명을 통해서..
[Data Studio] 채워진 지도 지표 만들기안녕하세요. 오랜만에 BI 관련해서 글을 작성합니다. 최근에 회사에서 Data Studio를 통해서 BI를 만들기 시작하면서 다시 한번 Data Studio를 통해서 BI를 만들기 시작하였습니다. 그리고 Data Studio가 Looker Studio로 명칭이 변경되었습니다. 하지만 아직도 Data Studio로 이름이 많이 불리고 있어서 Data Studio라고 글을 작성하였습니다. "채워진 지도" 지표는 Data Studio에서 구글맵을 이용하여 지도를 제공하며 기본적으로 Data Studio에서 제공하는 지표입니다. 구글맵답게 "로드 뷰" , "항공 뷰"등의 여러 가지 기능을 제공합니다. 지난번에 작성하였던 지하철 노선도 지표 그리기가 위경도를 이용하여 데이터를 표현하였다면 이번에는 지역명을 통해서..
2022.12.08 -
안녕하세요. 데이터 엔지니어 주형권입니다. 지난번에 작성 한 Cloud Build를 이용한 Github와 GCS의 동기화 작업을 소개한 적이 있는데요. ( 링크 ) 오늘 다시 한번 세팅해야 하는 일이 생겨서 세팅 하는 중에 오류를 발견하여 이를 어떻게 해결했는지 소개하고자 합니다. 오류 내용 "ERROR: build step 1 "gcr.io/cloud-builders/gsutil" failed: step exited with non-zero status: 1" 오류는 위와 같이 발생 하였습니다. 이게 무슨 내용인지 전혀 알 수가 없고, 무슨 말인지 알 수가 없어서 구글에 검색해도 해결 방법이 나오진 않았습니다. 더욱 자세한 내용을 스크린숏으로 보면 다음과 같습니다. yaml 파일이 잘못 된것이라고 생각..
[Cloud Build] GCS <-> github 동기화 실패 (failed: step exited with non-zero status: 1)안녕하세요. 데이터 엔지니어 주형권입니다. 지난번에 작성 한 Cloud Build를 이용한 Github와 GCS의 동기화 작업을 소개한 적이 있는데요. ( 링크 ) 오늘 다시 한번 세팅해야 하는 일이 생겨서 세팅 하는 중에 오류를 발견하여 이를 어떻게 해결했는지 소개하고자 합니다. 오류 내용 "ERROR: build step 1 "gcr.io/cloud-builders/gsutil" failed: step exited with non-zero status: 1" 오류는 위와 같이 발생 하였습니다. 이게 무슨 내용인지 전혀 알 수가 없고, 무슨 말인지 알 수가 없어서 구글에 검색해도 해결 방법이 나오진 않았습니다. 더욱 자세한 내용을 스크린숏으로 보면 다음과 같습니다. yaml 파일이 잘못 된것이라고 생각..
2022.12.06 -
안녕하세요. 주형권입니다. 데이터웨어하우스 관련 글을 오랜만에 쓰는 것 같습니다. 글을 읽기 전에 이 글의 내용은 제가 알고 있고 공부한 내용을 바탕으로 설명하였습니다. 이 내용을 꼭 맹신하지 않고 혹시라도 다른 내용이 있다면, 서로 비교하여 읽기를 추천드립니다. 데이터웨어하우스 (이하 DW) 관련한 여러 가지 글이 있는데 그중에 DW의 설계 기법인 Star Schema와 Snowflake Schema에 대해서 설명해 보려고 합니다. DW를 하다 보면 가히 필수로 알아야 하는 개념이며 추가적으로 Galaxy Schema라는 설계 기법도 존재합니다. 최근에는 BigQuery와 같은 컬럼 형식으로 저장하면서 이러한 기법을 굳이 사용하지 않아도 최적의 저장 효율을 제공합니다. DW 기법이 필요한 이유는? DW..
[DW] Star Schema와 Snowflake Schema에 대하여...안녕하세요. 주형권입니다. 데이터웨어하우스 관련 글을 오랜만에 쓰는 것 같습니다. 글을 읽기 전에 이 글의 내용은 제가 알고 있고 공부한 내용을 바탕으로 설명하였습니다. 이 내용을 꼭 맹신하지 않고 혹시라도 다른 내용이 있다면, 서로 비교하여 읽기를 추천드립니다. 데이터웨어하우스 (이하 DW) 관련한 여러 가지 글이 있는데 그중에 DW의 설계 기법인 Star Schema와 Snowflake Schema에 대해서 설명해 보려고 합니다. DW를 하다 보면 가히 필수로 알아야 하는 개념이며 추가적으로 Galaxy Schema라는 설계 기법도 존재합니다. 최근에는 BigQuery와 같은 컬럼 형식으로 저장하면서 이러한 기법을 굳이 사용하지 않아도 최적의 저장 효율을 제공합니다. DW 기법이 필요한 이유는? DW..
2022.11.26 -
안녕하세요. 최근 이직으로 인해서 오랜만에 인사를 드립니다. 이직을 하면서 새로운 환경에서 새로운 데이터 파이프라인을 만들다 보니 처음 접하는 도구를 사용하는 일이 많아졌습니다. GCP에 새로운 기능이 많이 생겼고 인원이 없는 경우 Saas를 이용해서 빠르게 무언가를 구축해야 하는 경우가 있어서 이번에는 GCP의 Composer를 사용하게 되었습니다. Composer란? https://cloud.google.com/composer/docs/composer-2/run-apache-airflow-dag 빠른 시작: Cloud Composer 2에서 Apache Airflow DAG 실행 | Google Cloud Cloud Composer 환경을 만들고 Cloud Composer 2에서 Apache Airf..
[GCP] Composer를 Git repo에 연동안녕하세요. 최근 이직으로 인해서 오랜만에 인사를 드립니다. 이직을 하면서 새로운 환경에서 새로운 데이터 파이프라인을 만들다 보니 처음 접하는 도구를 사용하는 일이 많아졌습니다. GCP에 새로운 기능이 많이 생겼고 인원이 없는 경우 Saas를 이용해서 빠르게 무언가를 구축해야 하는 경우가 있어서 이번에는 GCP의 Composer를 사용하게 되었습니다. Composer란? https://cloud.google.com/composer/docs/composer-2/run-apache-airflow-dag 빠른 시작: Cloud Composer 2에서 Apache Airflow DAG 실행 | Google Cloud Cloud Composer 환경을 만들고 Cloud Composer 2에서 Apache Airf..
2022.09.22