Programming
-
SparkSQL에서 증분 테이블 처리하기Programming 2024. 2. 25. 21:49
배경 ETL처리시 Spark를 통해 Trasfroming을 하는데 1000만 로우가 넘는 테이블을 이관하며 기존 Overwrite하는 방식이 아닌 증분되는 양만큼만 반영하기로 함 updated_at 컬럼으로 증분되는 양만 읽어서 기존 테이블에 upsert를 하는 방식 현재 운영하는 데이터웨어하우스는 일반적인 RDB가 아닌 HDFS기반이므로 불변성을 위해서 upsert를 할 수 없음 옵션 Hudi or Delta Lake or Iceberg와 같은 동시성이 제공되는 오픈소스를 사용한다 현재 실시간 테이블을 위해서 Delta Lake를 사용되고 있지만 이관을 위해서는 따로 사용하고 있지 않으므로 다른 테이블과 사용성 및 통합을 위해서 해당 옵션은 보류 SQL 윈도우 함수를 통해서 증분된 만큼 처리하고 기존 ..
-
PrestoSQL to Trino Migration 할 때 주의할 점Programming 2023. 12. 22. 23:07
prestoSQL to Trino라고는 하지만 prestoSQL은 사실 Trino로 리브랜딩되기 전의 이름이므로 Trino의 메이저 업데이트라고 봐도 무방하다. 이 포스팅에서는 트리노의 메이저 업데이트 할 때 신경써야할 점들을 모은 내용이다. 사실 메이저 업데이트를 진행한 것은 아주 오래전이고 구성한 인프라별, Trino에 설치한 플러그인별로 증상이 상이하며 지엽적인 내용이 될 가능성이 높다고 생각해서 그 당시 포스팅으로는 작성하지 않고 있었던 찰나에 그래도 부분적으로 나마 나와 동일한 증상을 겪고 있을 사람들을 위해 기록을 남긴다. 메이저 업데이트를 하는 것보다 새로 설치하는 것이 낫다 항상 앞자리가 바뀌는 업데이트를 진행할 때마다 느끼는 생각이다. 업데이트를 진행하다보면 지금당장은 티가 안나더라도 어..
-
kafka retention 용량 설정 값 이해하기Programming 2023. 5. 1. 01:17
overview retention.bytes옵션을 통해 retention 용량을 1GB로 설정했었는데 토픽의 용량이 7GB가 넘어가는 것들이 생겼다. 브로커당 용량이라고 이해해도 3GB넘지 않을 것이고 리플리케이션 팩터가 2라서라기엔 2GB를 훌쩍넘는다. 7GB라니...오버에도 한참 오버했다. 도대체 이 설정값들은 각각 무엇을 의미하는 것이고 어떤 매커니즘으로 메세지들이 지워지는지 파악해보자 Topic retention 용량 설정에 대해서 알아보기 전에 토픽에 대해서 간단히 정리해보자 partitions 리더 파티션과 팔로워 파티션으로 구분(replication-factor가 1인 경우 리더 파티션만 존재) 리더 파티션은 프로듀서 또는 컨슈머와 직접 통신하는 파티션으로 읽기, 쓰기 연산을 담당 팔로워 파..
-
debezium server 정리 및 트러블슈팅Programming/java 2023. 2. 6. 00:27
개요 CDC(Change Data Capture) CDC는 변경 데이터 켑처이라는 의미로 주로 데이터베이스와 같은 데이터 스토어의 데이터 변경을 포착하여 ETL, 감사(audit), 캐싱과 같은 다양한 후속 처리를 하는데 사용한다. Debezium 이름은 DB와 주기율표에 많은 요소 이름에 사용되는 -ium 접미사의 조합 Debezium은 다양한 데이터베이스를 모니터링하며 모든 이벤트를 대상으로 변경 사항을 분을 거의 즉시 응답하는 분산 오픈 소스 플랫폼이다. debezium은 결함과 실패를 허용하도록 설계되었고 수행하는 유일한 방법은 분산 시스템을 사용하는 것이다. Debezium은 모니터링 프로세스 또는 커넥터를 여러 시스템에 분산시킬 수 있고 문제가 발생하면 커넥터를 다시 시작할 수 있다. 카카오커..
-
ELT 툴 Airbyte 개요 및 M1 mac local환경 세팅Programming 2022. 4. 13. 15:13
Airbyte? 데이터 통합을 쉽고 확장가능성 있게 만들어주는 EL(T) Tool CDC기능을 사용 준실시간성으로 데이터를 가져올 수 있다 비교적 설치가 간편하다 지원하는 데이터 connector들이 많다 DB이외에 페이스북, 인스타그램 등 다양한 SNS과도 연동 가능하며 140개 이상의 커넥터를 지원 T(Transform)부분의 지원이 빈약하다 아직 Hive나 Glue 저장을 지원하지는 않는다 쿠버네티스, 에어플로우, dbt 등과 통합하여 사용할 수 있다. ex) airflow + airbyte + dbt on kubernates Architecture Airbyte는 플랫폼과 커넥터 이렇게 두가지 컨셉으로 나뉜다. 플랫폼은 모든 수평적 서비스들에서 요구하는 설정과 데이터의 움직임을 운영하는(UI, c..
-
airflow의 새로운 경쟁자 오케스트레이션 플랫폼 dagsterProgramming/python 2021. 12. 23. 23:42
Open Source Data Stack Conference 아래 내용은 위 동영상의 내용을 번안하고 정리한 내용입니다. 위 사진의 기술들은 다양한 방식들로 서로 의존성이 존재한다. 예를들어 스노우플로우나 다른 데이터 웨어하우스에서 데이터가 만들어지기 전까지 dbt를 실행할 수 없다. 그리고 dbt가 그것의 모델을 업데이트하기 전까지 Grouparoo같은 리버스 ETL은 새로운 정보를 적재할 수 없다. 이런 의존성들간에 Ordering과 Excute를 조율하는 것이 오케스트레이션의 목적이다. 왜 dagster여야 하는가? 전통적인 오케스트레이션은 스케줄링과 실행을 통합하는 시스템과 가시적이고 알림을 운영할 수 있어야 한다. 여기에 더해져서 덱스터는 유용한 metadata를 생성하는 과정에서 데이터가 어디..
-
[에러로그]parquet파일 변환 fastparquet v.s pyarrowProgramming/python 2021. 11. 19. 16:06
에러 내용 parquet로 변환한 파일을 read해서 확인했을 때 일부 컬럼의 로우 값이 제대로 인코딩되지 않은 문제가 있다. 다른 컬럼의 값들은 정상적으로 표출되었지만 특정 컬럼에서만 이상이 생기는 것을 확인했다. to_parquet 메소드 pandas 라이브러리에서 to_parquet 메소드를 사용해서 데이터프레임을 parquet 포맷으로 변경할 때, 사용할 수 있는 엔진의 옵션은 두 가지가 있다. pyarrow와 fastparquet이 바로 그것인데, pandas 내부적으로 이 두 라이브러리들을 가져와서 parquet파일로 변환하게 된다. 라이브러리를 선택하는 방법은 engine 파라미터에 해당하는 라이브러리명을 적어주면 된다. df.to_parquet("test.parquet", engine="p..
-
dockerfile 한국어 로케일 설정(feat. 우분투와 데비안의 차이)Programming 2021. 8. 10. 15:43
어플리케이션 내부나 쉘에서 한글이 등장할 때가 있는데 그때마다 오류가 생겨서 아예 언어셋을 UTF-8 인코딩된 한글 언어셋으로 설정했다. 해당 언어셋을 설치하기 위해서 아래와 같은 명령어를 dockerfile에 명시했다. RUN apt-get update && apt-get install -y locales git # Locale RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 ENV PYTHONIOENCODING=utf-8 빌드 한 뒤에 docker run -it imagename /bin/bash 로 도커 내부의 쉘로 접속했더니 다음과 같은 경고가 떴다. bash: warning: setlocale: LC_ALL: cannot c..