전체 글
-
[Trouble shooting] Datahub S3 메타데이터 주입시 에러 발생Project/D.D.P (Datahub) 2023. 7. 10. 11:08
처음 발생한 에러는 다음과 같다. File "/home/ubuntu/.local/lib/python3.10/site-packages/datahub/ingestion/run/pipeline.py", line 122, in _add_init_error_context raise PipelineInitError(f"Failed to {step}: {e}") from e datahub.ingestion.run.pipeline.PipelineInitError: Failed to configure the source (s3): Java gateway process exited before sending its port number 위 에러를 보고 자바가 설치되어있지 않기 때문이라고 생각해서 자바를 설치했다. sudo..
-
[알고리즘] 정렬 알고리즘 : 합병정렬 (Merge sort)CS기초/Algorithm, Data Structures 2023. 6. 27. 08:19
정렬의 기초로 분할 정복 방법을 사용해 분할, 정복, 결합의 세 단계를 거친다. 분할: 배열을 동일한 크기의 두 개의 부분 배열로 분할한다. 입력 크기를 n이라고 한다면 분할된 부분배열의 크기는 n/2가 된다. 정복: 각각의 부분 배열에 대해 합병 정렬을 순환적으로 적용한다. 결합: 정렬된 두 부분 배열을 합쳐서 하나의 정렬된 배열을 만든다. 간단하게 설명하면 합병정렬은 배열을 쪼개서 각각 정렬한 후 합치는 알고리즘이다. def merge_sort(num): l = len(num) if l > 1: mid = round(l/2+0.1) left = merge_sort(num[:mid]) right = merge_sort(num[mid:]) num = merge(left, right, mid, l-mid)..
-
눈으로 보기에 같은 글자이지만 다른 글자로 인식되는 경우에는 아스키코드를 뽑아보자Tips 2023. 6. 12. 23:09
현재까지 수집된 검색어를 대상으로 추천 검색어를 추출하는데, 입력된 검색어와 달라야하는 조건이 있었다. "한복"을 검색했는데 "한복"을 추천해주는 건 의미가 없으니. select input_s."query" as input_query , rmcd_s."query" as rcmd_query from searched_quries as input_s join searched_queries as rcmd_s on input_s.user_id = rcmd_s.user_id where input_s."query" != rcmd_s."query" (위의 코드는 실제 데이터를 추출한 코드에서 로직만 간략하게 표시한 코드이다) join시 where절에 input 검색어 != 추천 검색어 조건을 걸어줬는데도 다음과 같이 ..
-
Javascript에서 서버 시간대에 상관없이 한국 시간으로 현재 날짜 호출하기Tips 2023. 5. 16. 10:35
function getToday() { const locale = new Date(); // 서버 시각 /* 1) .getTime()을 통해 현재 서버의 에폭시간(unix time)을 구함 2) .getTimezoneOffset()을 통해 서버와 UTC간의 시간차를 분단위로 구함 (Offset이라고 함) 3) Offset에 *60000을 해서 밀리초로 변환함 4) 두 초를 더해줌 = UTC의 에폭시간이됨 */ const ust = locale.getTime() + (locale.getTimezoneOffset() * 60 * 1000); /* 1) KST와 UST의 시차인 9시간을 밀리초로 변환해준 것을 UST와 더함 = KST의 에폭시간이 됨 2) KST의 에폭시간을 Date함수의 인자로 넣어주면 연,..
-
Glue에서 mySQL로 write시 encoding option주기 (feat. 한글깨짐) - 2부Data Engineering/AWS, Spark 2023. 5. 15. 22:03
이전에 mySQL로 dynamicFrame을 쓰는데 한글이 깨져서 url로 인코딩 옵션을 주는 방법을 찾았으나 Glue에서 아무리해도 먹지 않았던 포스팅을 쓴 적이 있다. 그래서 spark세션으로 삽입하는 방법으로 작업했고, 포스팅도 그렇게 마무리했는데 (링크) 원인이 너무 궁금해서 re:Post에 질문을 남겨뒀었다. 지나가던 친절한 분이 jdbc driver 버전 문제일 수 있다는 힌트를 주었고, 비록 그분이 달아준 링크는 관련이 없었으나 이를 키워드로 해당 문서를 뒤져보았다. 일단 Glue에서 MySQL jdbc 연결시 default로 사용하는 driver 버전은 8.0.23으로, 굉장히 특이한 위치에 명시되어있다. 찾는데 한참 걸림;; (링크된 문서의 jdbc connectionType 값에 적혀있..
-
RDS MySQL DB 트랜잭션 binary log 보기Data Engineering/AWS, Spark 2023. 5. 11. 18:18
다음 쿼리를 실행하면 서버에 저장되어있는 bin log 파일 목록을 조회할 수 있다. SHOW BINARY LOGS; 해당 로그 파일 중 특정 파일의 로그 내용을 보고 싶다면 다음 쿼리를 사용할 수 있다 (추가 옵션은 공식문서참조) SHOW BINLOG EVENTS IN 'binlog 파일 이름'; 문제는 쿼리로 바이너리 로그를 조회하면 로그 시간이 조회가 안 된다는 것이었다. 나는 시간을 보는 것이 필요했기에 raw log를 받는 방법을 선택했다. Raw log는 mysqlbinlog 유틸리티를 사용해 다운받을 수 있고, mysqlbinlog 유틸리티는 mysql을 설치하면 같이 받아진다. brew install mysql 주의할 점은 바이너리 로그를 AWS 공식문서에 나온 대로 받으면 DB서버 설정..
-
Glue에서 mySQL로 write시 encoding option 주기 (feat. 한글깨짐)Data Engineering/AWS, Spark 2023. 5. 10. 18:06
Glue에서 from_jdbc_conf를 통해 dynamicFrame을 insert시켰는데 DB의 기본 인코딩 세팅때문에 한글이 깨져서 인서트되는 문제가 발생했다 (5.7 이하 버전) pymysql의 connection메소드에는 이를 위해 charset이라는 옵션이 있는데, from_jdbc_conf에는 인코딩 옵션이 없어 찾아보니 인코딩 옵션을 jdbc url의 파라미터로 넘겨줄 수 있었다. 처음에 확인했던 문서에는 인코딩 옵션을 넘겨주는 파라미터 이름이 characterEncoding이라고 되어있어 그렇게 넘겨줬더니 An error occurred while calling o111.pyWriteDynamicFrame. Unsupported character encoding 'utf8?useCursor..
-
Lamda로 서로 다른 vpc에 있는 redshift에서 rds로 reverse ETL하기 (VPC peering)Data Engineering/AWS, Spark 2023. 5. 9. 00:32
AWS에서 작업을 하다보면 항상 가장 힘든게 네트워크 설정인 것 같다. 오늘은 Lamda로 서로 다른 private subnet에 있는 redshift에서 rds로 reverse ETL 파이프라인을 구성했던 방법을 기록해보려한다. 기본적으로 Lambda는 public network에 위치하고, private network로는 접근할 수 없다. 따라서 lamda에서 RDS나 redshift에 접근하기 위해서는 Lamda 함수를 생성한 후, 해당 함수의 configuration에서 접근하고자하는 VPC와 subnet, 그리고 보안그룹을 선택해서 람다가 해당 private network에 위치하도록 해주어야한다. 하지만 이렇게 했을 때 문제점은, Lamda가 특정 private subnet에 들어가기 때문에 ..