데이터를 분석하기 위해서는 다양한 스토리지를 하나의 저장소로 모아야 하는 작업이 필요한 경우가 많다. 이때 처음에 데이터를 다 복사해와도 계속 변경되는 데이터가 생기기 때문에, 데이터를 동기화 해야 하는 이유가 생기기 마련이다. 이런문제를 해결하기위한 첫걸음은 변경분의 캡쳐 데이터를 (change data capture, CDC) 만들고, 이걸 어떻게 반영할것인가? 이것이 핵심이다. Flink 는 CDC 형태의 데이터 포맷 중 Debezium Format 을 기본지원한다. 이 포맷은 op, after, before 필드가 필수여야 한다. 근데 op 필드가 없는 CDC 포맷은 어떻게 처리할까? OP필드 없는 CDC 처리하기 사실 op 필드가 없어도 다음과 같이 추론이 가능하다. 그래서 OP 코드값을 찾을 ..
Flink 에서는 JDBC Connector 가 존재한다. 하지만 오피셜하게 지원되는 dbms는 총 3개 뿐이다. MySQL과 PostgreSQL 그리고 Derby ... https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/connectors/table/jdbc/ JDBC JDBC SQL Connector # Scan Source: Bounded Lookup Source: Sync Mode Sink: Batch Sink: Streaming Append & Upsert Mode The JDBC connector allows for reading data from and writing data into any relational databases..
로그파일이나 임시파일들이 계속 쌓일때 생성일기준으로 과거 데이터를 지우고 싶을때 가 종종있다. 이럴때 유용한게 ls 에서 날짜 포맷팅 하고 awk 에서 필터링후 xargs 로 삭제 명령의 인자로 보내는 형태로 처리한다. 예시 나 같은 경우는 1달전 로그를 지워야 하는 패턴을 많이 쓰게 되는데... 예를 들어 2021년 1월 이전데이터를 다 삭제 하고 싶다면 아래와 같이 명령어를 날리면 된다. # 2021년 1월 이전 데이터 제거 ls -l --time-style="+%Y%m" | awk '{if ($6< 202101 ) {print $7}}' | xargs rm -rf 당연한 소리지만, 삭제할 파일이 모인 폴더로 이동하고 날리면 된다. 1달이 아니라 일단위까지 필요하다면 time-style 은 +%Y%m..
개요 가끔 개발서버에서 설정파일이나 오류메시지 로그를 복사해오고 싶은 경우가 있다. 그럴때 가장 손쉽게 사용할 수 있는건, python의 SimpleHTTPServer 를 쓰면 정말 쉽게 복사 해올수 있다. 이게 의외로 유용한게 linux 서버에 python 이 왠만하면 기본 설치 되어있다보니 리눅스 서버의 파일을 급하게 복사해올 때 매우 유용하다. (심지어 포트도 지정가능하고) python -m SimpleHTTPServer [port] 보통 장애났을때 관련된 전체 로그를 메일로 전달해주거나, 딴 서버에 동일하게 세팅해야해서 설정파일을 복사하거나 할 때 의외로 유용하게 사용했다. (윈도우도 python이 설치되면 사용가능하다) 사용방법 예시 사용법은 아주 쉽다. 복사할 파일이 있는 폴더로 이동하고, "..
특정필드에서 검색 후, 검색결과가 있으면 해당 행을 색깔을 칠하고 싶은 경우가 있다. 이때 사용하는 엑셀 혹은 구글시트의 기능이 "조건부 서식" 이다. 그리고 미리 알아둬야하는 수식이 있는데, FIND 함수이다. 이 함수는 해당 필드의 문자열에서 검색어가 있으면 해당 위치를 숫자로 리턴한다. 예를 들어 "=FIND("버거킹", $A1)" 형태로 수식을 넣고 복붙하면 아래와 같이 못찾으면 숫자가 리턴안된다. 이걸 활용해서 수식으로 조건부 서식을 넣으면 된다는 말이다. 말로 복잡하니 바로 예시를 통해 알려주도록 하겠다. 예시 예를 들어, 다음과 같은 시트가 존재하고 PRODUCT(즉 N열) 에서 "팔찌" 라는 키워드가 있다면, 분홍 배경색을 칠하는걸 하고 싶다는 말이다. 이해를 돕기위해 샘플 데이터는 아래 ..
개요 희안하게 0건인 결과와 UNION ALL 하는 경우 null 오류가 발생했다. 더 특이했던건 hive client 에서는 쿼리가 성공하는데... jdbc 드라이버를 통하거나 beeline 을 통해서 쿼리를 날릴때만 발생했다는 점이다. (아마 두 설정에 차이가 있던건 아닌가 싶긴하다. Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: NullPointerException null at org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:315) at org.apache.hive.service..
개요 초창기 hdp 에서 hive 의 성능이 좋아진다면서 llap 를 지원하는 hive를 사용한적이 있다. 이때 llap 모드에서 쿼리가 실패했고, 컨테이너 모드로 바꿔서 실행했는도 다음과 같은 오류가 나서 골치아팠던적이 있다. 컨테이너 사이즈와 힙을 높게 할당했지만 그래도 OutOfMemoryError 가 발생했는데, 결국 삽질끝에 회피 방법을 찾긴 했다. - 오류 메시지 (컨테이너 모드 상태) Error: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Map 1, vertexId=ver..
개요 hive 에서 join 은 매우 느린 연산이다. 돌려본 사람은 알겠지만 join 이 들어간 경우 엄~~청 결과가 느려진다. 그래서 join 이 있는 쿼리를 튜닝해야할 일이 생길텐데 가장 손쉬운 방법은 broadcast join 을 사용하는것이다. (다른말로는 mapside join 이라고도 한다) 사용가능한 패턴은 "큰테이블 join 작은테이블" 의 경우에만 가능하지만, 일반적으로 이런패턴의 쿼리가 많아서 알아두면 많이 도움이 된다. 참고로 broadcast join 으로 유도하면 hive 에서 reduce 단계를 제거해서 50% 정도까지 시간이 단축될 수 있다. 사용방법 우선 연관된 설정이 3개가 있는데 다음과 같이 활성화 해주면 좀더 많은 케이스에 적용을 할 수 있다. 기본값이 약 20메가 수준..