전체 글
데이테베이스 관리자로 시작하여 데이터 엔지니어로 경력을 이어가고 있는 경험을 정리 하였습니다.
-
⚠️Issue)When you DROP in Databricks, it is not immediately deleted from S3. This is a device that Databricks has in place in case a user accidentally DROPs a table. When you delete a table, the actual physical file in AWS's S3 is not deleted but is kept for 30 days and is automatically deleted after 30 days. dropping a managed table does not remove the underlying filesthe documentation states t..
[Databricks] Find the location of a table S3 file that has already been deleted (DROP)⚠️Issue)When you DROP in Databricks, it is not immediately deleted from S3. This is a device that Databricks has in place in case a user accidentally DROPs a table. When you delete a table, the actual physical file in AWS's S3 is not deleted but is kept for 30 days and is automatically deleted after 30 days. dropping a managed table does not remove the underlying filesthe documentation states t..
2024.10.21 -
⚠️이슈)Databricks에서 DROP을 날리면 S3에 즉시 삭제되지 않습니다. 이는 Databricks에서 사용자가 실수로 테이블을 DROP 하였을 때를 대비하여 마련해 둔 장치입니다. 테이블을 삭제하면 30일 동안 AWS의 S3에 있는 실제 물리적 파일은 삭제되지 않고 보관하고 있다가 30일 이후에 자동으로 삭제가 됩니다. dropping a managed table does not remove the underlying filesthe documentation states that "drop table": Deletes the table and removes the directory associated with the table from the file system if the table is ..
[Databricks] 이미 삭제(DROP)한 테이블 S3 파일 위치 찾기⚠️이슈)Databricks에서 DROP을 날리면 S3에 즉시 삭제되지 않습니다. 이는 Databricks에서 사용자가 실수로 테이블을 DROP 하였을 때를 대비하여 마련해 둔 장치입니다. 테이블을 삭제하면 30일 동안 AWS의 S3에 있는 실제 물리적 파일은 삭제되지 않고 보관하고 있다가 30일 이후에 자동으로 삭제가 됩니다. dropping a managed table does not remove the underlying filesthe documentation states that "drop table": Deletes the table and removes the directory associated with the table from the file system if the table is ..
2024.10.21 -
Databricks에서 파티션을 재구성해야 할 때가 많이 있을 것입니다. 특히 초기에 데이터 환경을 세팅하는 경우가 그럴 것입니다. 초기에는 데이터의 패턴을 정확히 알지 못하거나 여러 가지 변수로 인하여 파티션을 재구성하는 경우가 종종 있습니다. 그럴 때 어떻게 하면 파티션을 재구성할 수 있는지에 대해서 이번에 경험을 통해서 알게 된 내용을 글로 적어보자 합니다. Ⅰ. 처음에 어떻게 하였는가?우선 회사의 데이터이기에 정확한 사이즈는 언급이 불가능 하지만 수십 TB단위의 데이터입니다. 그렇기에 Databricks에서 단순히 SQL을 이용하여 파티션을 재구성 하고자 했습니다.REPLACE TABLE 테이블명 USING DELTA PARTITIONED BY (파티션컬럼1,파티션컬럼2)AS SELECT *..
[Databricks] 대용량 테이블 파티션 재구성Databricks에서 파티션을 재구성해야 할 때가 많이 있을 것입니다. 특히 초기에 데이터 환경을 세팅하는 경우가 그럴 것입니다. 초기에는 데이터의 패턴을 정확히 알지 못하거나 여러 가지 변수로 인하여 파티션을 재구성하는 경우가 종종 있습니다. 그럴 때 어떻게 하면 파티션을 재구성할 수 있는지에 대해서 이번에 경험을 통해서 알게 된 내용을 글로 적어보자 합니다. Ⅰ. 처음에 어떻게 하였는가?우선 회사의 데이터이기에 정확한 사이즈는 언급이 불가능 하지만 수십 TB단위의 데이터입니다. 그렇기에 Databricks에서 단순히 SQL을 이용하여 파티션을 재구성 하고자 했습니다.REPLACE TABLE 테이블명 USING DELTA PARTITIONED BY (파티션컬럼1,파티션컬럼2)AS SELECT *..
2024.09.29 -
안녕하세요. 주형권입니다. 지난번에 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 -
안녕하세요. 주형권입니다. 최근에 Python을 통해서 특정 상황에서 Teams 채널에 메시지를 전송 할때 다음과 같이 알림이 발생하여 다른 방법으로 보내는 방법을 찾는 과정을 정리하였습니다. 이 방법이 정확한 방법은 아닌거 같으나, 일단 메시지가 없이 잘 보내져서 방법을 공유 합니다. 더욱 좋은 방법이 있으신 분은 댓글을 부탁 드립니다. 우선 Learn More을 눌러서 들어가면 기존에 Webhook은 종료되는거 같습니다. Teams webhook 종료 그래서 새로운 방법을 찾아야 하는데, 그 방법이 Power Automate Workflow로 보입니다. 근데, 읽어봐도 도통 무슨 이야기인지 잘 모르겠고... Python에서 어떻게 콜해야 하는지 전혀 모르겠습니다... 기존에는 다음과 같이 python..
[Teams] Python에서 Power Automate Workflow을 이용한 Teams 메시지 전송안녕하세요. 주형권입니다. 최근에 Python을 통해서 특정 상황에서 Teams 채널에 메시지를 전송 할때 다음과 같이 알림이 발생하여 다른 방법으로 보내는 방법을 찾는 과정을 정리하였습니다. 이 방법이 정확한 방법은 아닌거 같으나, 일단 메시지가 없이 잘 보내져서 방법을 공유 합니다. 더욱 좋은 방법이 있으신 분은 댓글을 부탁 드립니다. 우선 Learn More을 눌러서 들어가면 기존에 Webhook은 종료되는거 같습니다. Teams webhook 종료 그래서 새로운 방법을 찾아야 하는데, 그 방법이 Power Automate Workflow로 보입니다. 근데, 읽어봐도 도통 무슨 이야기인지 잘 모르겠고... Python에서 어떻게 콜해야 하는지 전혀 모르겠습니다... 기존에는 다음과 같이 python..
2024.07.11 -
안녕하세요. 주형권입니다.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 -
안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성 하였을 당시의 연차가 1년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 이 글을 읽기 전에 트랜잭션의 개념을 알아두면 정말 좋습니다. RDB에서 트랜잭션이란 작업의 단위를 뜻 합니다. RDB에서는 트랜잭션을 통해서 작업이 묶이고 해당 트랜잭션의 작업은 모두 성공 또는 모두 실패해야 합니다. 그렇기에 Begin End 구문을 통해서 작업을 묶어줘야 합니다. 관련하여 잘 정리된 블로그를 한번 읽어보시고 이 글을 읽으면 많은 도움이 됩니다. https://csj000714.tistory.com/623..
[MSSQL] BEGIN ... END안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성 하였을 당시의 연차가 1년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 이 글을 읽기 전에 트랜잭션의 개념을 알아두면 정말 좋습니다. RDB에서 트랜잭션이란 작업의 단위를 뜻 합니다. RDB에서는 트랜잭션을 통해서 작업이 묶이고 해당 트랜잭션의 작업은 모두 성공 또는 모두 실패해야 합니다. 그렇기에 Begin End 구문을 통해서 작업을 묶어줘야 합니다. 관련하여 잘 정리된 블로그를 한번 읽어보시고 이 글을 읽으면 많은 도움이 됩니다. https://csj000714.tistory.com/623..
2023.12.12 -
안녕하세요. 주형권입니다. 지난번에 링크드인에서 이야기드렸듯이 과반의 득표를 얻어서 관련하여 글을 작성하였습니다. 이 글은 이제 막 시작하는 데이터엔지니어 또는 데이터엔지니어를 꿈꾸는 학생 또는 다른 직문의 사람에게 조금이나마 도움이 되고자 하여 작성하였으며, 저의 개인적인 견해와 생각이 많이 반영되어 있으므로 "꼭 이렇게 하세요." 라는 의도는 없으니 글을 읽을 때 참고 차원에서 읽어 주시기 바랍니다. 시작하며 시작하기에 앞서 이글을 왜 작성하였는지 설명을 드리려고 합니다. 제가 처음에 일을 시작할 때는 사수와 부사수라는 개념이 일반적이었습니다. 흔히 말하는 시니어와 주니어(신입)를 한 세트로 묶어서 사수가 부사수를 교육시켜주는 역할을 하였습니다. 요즘은 많은 회사가 사수와 부사수보다는 멘토(mento..
데이터엔지니어 사수가 부사수하게 하는 조언안녕하세요. 주형권입니다. 지난번에 링크드인에서 이야기드렸듯이 과반의 득표를 얻어서 관련하여 글을 작성하였습니다. 이 글은 이제 막 시작하는 데이터엔지니어 또는 데이터엔지니어를 꿈꾸는 학생 또는 다른 직문의 사람에게 조금이나마 도움이 되고자 하여 작성하였으며, 저의 개인적인 견해와 생각이 많이 반영되어 있으므로 "꼭 이렇게 하세요." 라는 의도는 없으니 글을 읽을 때 참고 차원에서 읽어 주시기 바랍니다. 시작하며 시작하기에 앞서 이글을 왜 작성하였는지 설명을 드리려고 합니다. 제가 처음에 일을 시작할 때는 사수와 부사수라는 개념이 일반적이었습니다. 흔히 말하는 시니어와 주니어(신입)를 한 세트로 묶어서 사수가 부사수를 교육시켜주는 역할을 하였습니다. 요즘은 많은 회사가 사수와 부사수보다는 멘토(mento..
2023.11.20 -
들어가며 안녕하세요. 주형권입니다. 오늘은 저연차 주니어 분들에게 도움이 될 것 같은(?) 글을 작성하려고 합니다. 제가 주니어 시절에 많은 시니어 분들께서 강조하셨고 가르쳐 주셨던 내용을 여러분께 정리하여 공유 드리고자 합니다. 저의 링크드인을 보면 아시겠지만 저는 이직을 꽤 여러번 하였습니다. 물론 자의가 아닌 타의(회사가 망...)로 회사를 옮긴적도 여러 번 있지만 이직을 여러 번 경험 한 저에게는 한 가지 습관이 있습니다. 누구나 자신만의 업무 스타일이 있고, 연차가 오래될수록 그 업무 스타일은 습관으로 굳어지는 것 같습니다. 여러가지 업무 스타일이 있지만 유독 이 부분은 제가 강점이라고 생각합니다. 누군가에게는 별것 아니라고 들을 수 있지만 제가 여러 회사를 옮기면서 느꼈지만 별게 맞습니다. 왜..
데이터 엔지니어인 내가 새롭게 입사 하는 회사에서 하는 것들어가며 안녕하세요. 주형권입니다. 오늘은 저연차 주니어 분들에게 도움이 될 것 같은(?) 글을 작성하려고 합니다. 제가 주니어 시절에 많은 시니어 분들께서 강조하셨고 가르쳐 주셨던 내용을 여러분께 정리하여 공유 드리고자 합니다. 저의 링크드인을 보면 아시겠지만 저는 이직을 꽤 여러번 하였습니다. 물론 자의가 아닌 타의(회사가 망...)로 회사를 옮긴적도 여러 번 있지만 이직을 여러 번 경험 한 저에게는 한 가지 습관이 있습니다. 누구나 자신만의 업무 스타일이 있고, 연차가 오래될수록 그 업무 스타일은 습관으로 굳어지는 것 같습니다. 여러가지 업무 스타일이 있지만 유독 이 부분은 제가 강점이라고 생각합니다. 누군가에게는 별것 아니라고 들을 수 있지만 제가 여러 회사를 옮기면서 느꼈지만 별게 맞습니다. 왜..
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 -
안녕하세요. 주형권입니다. 최근에 올린 도베르만(데이터레이크 모니터링 시스템)을 만들 때 Superset을 통해서 UI를 구성하였는데요. 이 과정에 여러가지 기능 중에 Superset의 표 형태 또는 Text Box등에서 hyperlink를 넣는 방법에 대해서 소개하고자 합니다. 대단한 기술은 아니고 HTML의 기능을 통해서 하는 방법을 소개 하고자 합니다. 사용자가 표를 볼때 해당 로그를 바로 볼 수 있도록 hyperlink를 걸어주면 굉장히 만족도가 올라갑니다. 적용 방법 저의 경우 MySQL 데이터베이스에서 데이터를 불러서 표에 보여주는데요. SELECT 'https://www.naver.com' AS url UNION ALL SELECT 'https://www.google.com' UNION AL..
[Superset] 표,Text Box 등에 hyperlink 넣기안녕하세요. 주형권입니다. 최근에 올린 도베르만(데이터레이크 모니터링 시스템)을 만들 때 Superset을 통해서 UI를 구성하였는데요. 이 과정에 여러가지 기능 중에 Superset의 표 형태 또는 Text Box등에서 hyperlink를 넣는 방법에 대해서 소개하고자 합니다. 대단한 기술은 아니고 HTML의 기능을 통해서 하는 방법을 소개 하고자 합니다. 사용자가 표를 볼때 해당 로그를 바로 볼 수 있도록 hyperlink를 걸어주면 굉장히 만족도가 올라갑니다. 적용 방법 저의 경우 MySQL 데이터베이스에서 데이터를 불러서 표에 보여주는데요. SELECT 'https://www.naver.com' AS url UNION ALL SELECT 'https://www.google.com' UNION AL..
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