하나의 Impala 테이블은 여러개의 Parquet 파일로 구성될 수 있는데, 이때 각 파케이 파일들의 컬럼 순서가 다를 수가 있다. 임팔라만을 이용해서 파케이 파일을 생성했다 하더라도 기존에 없던 컬럼이 이후에 rename 되는 경우 또는 다른 방식으로 생성된 파케이 파일을 impala 에서 추가로 로드하는 경우에 이런 상황이 발생할 수 있을 것 같다. 어쨋든 다음과 같은 에러가 발생하는 경우 […]
[MySQL] WITH RECURSIVE 구문을 이용한 Row Generator
MySQL 에서는 아래와 같이, Oracle 에서처럼, 간단하게 리스트 데이터를 생성해내는 문법이 없다. SELECT LEVEL FROM DUAL CONNECT BY LEVEL < 9; 오라클에서는 connect by를 이용해서, 데이터를 추출할때 조인걸어 쓰거나 간단하게 테스트 데이터를 만들 때 유용하게 쓸 수 있었는데 다른 RDBMS에서는 기본 지원되지 않아 아쉽다. PostgreSQL 에서도 generate_series(1,n) 을 이용해서 range list 를 만들어 줄 수 […]
[Jdbc] DriverPropertyInfo를 이용해 현재 드라이버 연결의 파라미터 값 확인하기
[Jdbc] DriverPropertyInfo를 이용해 현재 드라이버 연결의 파라미터 값 확인하기 jdbc에서 useAffectedRows 파라미터를 테스트해보던 중에 현재 jdbc 드라이버에 제대로 적용이 되어있는 것인지 확인이 필요했는데, java.sql.DriverPropertyInfo 를 이용해서 확인할 수 있었다. 아래와 같이 테스트 소스를 작성하고 파라미터 설정을 바꿔가면서 확인해보니 제대로 동작하는 것을 확인할 수 있었다. 출력 부분은 필요에따라 변형하면될 것 같고 어플리케이션 개발 단계에서는 DEBUG 모드로 […]
[Oracle] Diagnosability in Jdbc, driver에서 사용되는 SQL 로깅
[Oracle] Diagnosability in Jdbc, driver에서 사용되는 SQL 로깅 Oracle jdbc driver (ojdbc) 중에서 _g 로 끝나는 라이브러리가 있는데 이걸 이용하면 driver 를 통해서 쿼리하는 SQL 을 모두 추적할 수가 있다. Oracle Test DB docker hub 에 간단하게 오라클 데이터베이스를 테스트해볼 수 있는 이미지가 있어 이걸 이용했다. 등록한 사용자랑 DB 스키마를 보니 owncloud 에서 repository DB […]
[StreamSets] Data Collector 및 Oracle bulkload 설치
시스템 환경 설정 StreamSets는 openfile 제한을 32,768 이상으로 설정해야한다. sudo vim /Library/LaunchDaemons/limit.maxfiles.plist 파일을 열어 아래 내용 입력 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>32768</string> <string>32768</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist> 파일 저장 후, 다음 명령으로 적용 sudo launchctl unload […]
[SQL] mysql data sample
데이터 파이프라인, 마트 개발 업무를 맡게 되면서 SQL 역량에 대한 필요성을 많이 느낀다. 데이터베이스 엔지니어로 일했던 이전까지의 경력에서는 DB 인스턴스 레벨에서 시스템 구축에 눈높이가 맞춰져있었다. DB 성능을 개선하는 일을 많이 해보기는 했지만 인스턴스 리포트의 몇가지 지표를 보고 적절한 설정을 하는 일들 위주였고, SQL은 이미 짜여진 쿼리를 간단히 변형해보는 정도이거나 시스템 카탈로그를 뒤지는 정도의 쿼리 밖에 […]
[Impala] Data Types
[Impala] Data Types 정수 자료형 Impala에서는 다음과 같이 네 종류의 정수 자료형을 제공하며 각각 차지하는 공간과 범위가 다르다. 오라클의 TO_CHAR(), TO_NUMBER() 와 같이 숫자와 문자열을 바꿀수 없고 CAST(SOME_COLUMN_NAME as datatype_to_cast) 함수를 이용해 변형하고자 하는 타입을 지정해주어야하는데 테이블을 설계할 때 잘못하면 지원 범위를 넘어서는 숫자가 생겨 문제가 될 수 있으므로 주의를 해야할 것 같다. 번거롭긴 하지만 […]
[ElasticSearch] 검색엔진 만들기 4 – Flask 웹서비스
[ElasticSearch] 검색엔진 만들기 4 – Flask 웹서비스 elasticsearch에 필요한 데이터는 다 색인해뒀기 때문에 검색엔진 자체는 다 만들어졌고 서비스를 위해서 적당한 UI 만 있으면 될 것 같다. 기존 운영하는 웹페이지에 이식하고자 하는 경우에는 작게 모듈형태로 만들어서 간단한 스크립트로 해당 검색 엔진을 불러오게할 수도 있을 것 같은데 이것만으로 완전한 독립 서비스를 구축하는 것이어서 크게 단계를 나누어서 만들지는 […]
[ElasticSearch] 검색엔진 만들기 3 – Python 검색 모듈 만들기
[ElasticSearch] 검색엔진 만들기 3 – Python 검색 모듈 만들기 IMS 데이터는 앞서 Elasticsearch에 인덱싱 해두었고 이를 검색하는 모듈을 Python API 를 이용해서 만들어본다. Python Flask로 만들면 웹서비스를 직접 할 수도 있고 다른 프레임워크에 이식하기 위한 HTTP API 를 만들어내기도 간편한 것 같다. 쿼리 템플릿 먼저 검색에 사용할 쿼리를 만들어야하는데 kibana dev tools 에서 SQL 툴처럼 […]
[ElasticSearch] 검색엔진 만들기 2 – IMS 데이터 크롤링
[ElasticSearch] 검색엔진 만들기 2 – IMS 데이터 크롤링 Selenium, BeautifulSoup 를 이용해서 IMS 이슈 페이지 Crawler 를 만든다. 기초적인 부분은 [여기]()를 참고. 단위 크롤러 수집할 이슈 번호에 대한 리스트를 만들어 한번에 수집하고 Elasticsearch에 인덱싱 하는 IndexIssueList 함수를 만들었다. (IMS 는 이슈 번호를 URL(https://ims.tmaxsoft.com/tody/ims/issue/issueView.do?issueId=) 에 변수로 대입해서 각 이슈 페이지에 접근할 수 있다.) _LOGIN_ID = "IMS_USERNAME" […]