성공한 케이스를 그대로 적으면 짧은 내용이지만 혹시나 나중에 다시 쓸모가 있을지도 모르는 삽질 과정을 기록하기 위해서 mysql 설치 과정만 별도로 정리한다. cannot execute binary file: Exec format error 일단, 기존에 x86 환경에서 정리해놓은 스크립트로 mysql 바이너리를 그냥 다운 받아 실행했는데 위 에러가 발생해서 잠깐 동안 고민에 빠졌었다. 몇번이고 그냥 실행해보다가 보니 바이너리(mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz)에 x86_64 라고 적힌게 […]
[impala] from_utc_timestamp 타임존 처리
HUE는 타임존이 UTC 로 하드코드 돼 있어서 설정을 통해 기본 타임존을 바꿔줄 수는 없다고 한다. impala 3.1 버전 부터는 TIMEZONE 설정이 생겼다고는 하는데 최신 HUE 에서도 설정이 가능할 지는 모르겠다. 테스트 환경인 v2.10.0-cdh5.13.0 버전에서는 impala 자체적으로도 타임존을 변경할 수 없다. 어쨋든 from_utc_timestamp 함수를 이용해 쿼리 레벨에서 타임존 처리가 가능한데, 타임존 코드를 'KST'로 잘못 넣어서 오랫동안 […]
[Impala] ALL_TAB_COLUMNS for Impala (Hive)
현재 업무에서는 임팔라를 주력 데이터베이스로 활용하고 있다. 오라클 엑사 DW에서 하둡으로 ETL 한 뒤, 운영 DW에는 하기 부담스러운 헤비한 쿼리를 하는데에 사용한다. 원천이 오라클 데이터베이스인 탓에 소스 데이터베이스인 오라클과 주기적으로 스키마를 맞춰주어야 하는데, 오라클에는 ALL_TABLES, ALL_TAB_COLUMNS 와 같은 시스템 카탈로그가 있어, 테이블 스키마 관련 필요 정보를 쿼리해보기 좋았는데 임팔라에는 이런 시스템 카탈로그가 기본 제공되고 있지 […]
[Impala] Error parsing row 현상
impala 에서 parquet 테이블을 보정할 일이 있어서, CTAS로 일부분만 백업해두고 혹시 문제가 있는지 쿼리를 해봤는데 다음과 같은 에러가 발생했다. Error converting column: 126 to DOUBLE Error parsing row: file: hdfs://cluster01/user/hive/warehouse/imp.db/tab_dpcn_info_l/a7422143a7852306-8b0cbcb600000005-1957752130_data.0, before offset: 629145600 에러 메시지 자체는 126번 컬럼을 DOUBLE 로 형변환 하는데 실패했고 해당 문제가 발생한 데이터가 위 hdfs://.. 경로에, offset 번째 줄에 있다는 내용인데, […]
[impala] rpad와 아스키 코드를 이용한 인덱스 컬럼 범위 검색
rpad 문법은 rpad(A,N,B) 와 같이 썼을 때, 전체 문자열 길이가 N 만큼 되도록 B 문자열을 붙여준다. 때문에 fixed-width 컬럼의 값이나 검색 조건을 만들어내는 데에 사용할 수 있다. 우리 시스템에서는 특정 이벤트를 식별하기 위해서 맨 앞 열 여섯 자리는 해당 이벤트 발생 시간이면서 33 자리인 id를 키로 사용하고 있는데 이 때에 rpad 를 활용하면 유용하다. 특정 […]
[Impala] PARQUET_FALLBACK_SCHEMA_RESOLUTION 설정과 Parquet 테이블의 Schema Evolution
하나의 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 […]
[SQL] mysql data sample
데이터 파이프라인, 마트 개발 업무를 맡게 되면서 SQL 역량에 대한 필요성을 많이 느낀다. 데이터베이스 엔지니어로 일했던 이전까지의 경력에서는 DB 인스턴스 레벨에서 시스템 구축에 눈높이가 맞춰져있었다. DB 성능을 개선하는 일을 많이 해보기는 했지만 인스턴스 리포트의 몇가지 지표를 보고 적절한 설정을 하는 일들 위주였고, SQL은 이미 짜여진 쿼리를 간단히 변형해보는 정도이거나 시스템 카탈로그를 뒤지는 정도의 쿼리 밖에 […]