임팔라에는 조인 힌트 외에는 조회 성능 개선을 위한 힌트가 특별히 없다. 임시 테이블로 처리 단계를 나누는 방법이 그나마 확실한 방법인데 이건 약간 번거롭다. 조인 방식은 Broadcast join (/*+ broadcast */) 이 기본인데, Partitioned join (/*+ shuffle */) 으로 동작하도록 명시적으로 힌트로 제어할 수 있다. SET DEFAULT_JOIN_DISTRIBUTION_MODE=shuffle; 와 같이 파라미터로 기본값이 다르게 설정돼있을 수도 있으니 명시적으로 […]
[impala] from_utc_timestamp 타임존 처리
HUE는 타임존이 UTC 로 하드코드 돼 있어서 설정을 통해 기본 타임존을 바꿔줄 수는 없다고 한다. impala 3.1 버전 부터는 TIMEZONE 설정이 생겼다고는 하는데 최신 HUE 에서도 설정이 가능할 지는 모르겠다. 테스트 환경인 v2.10.0-cdh5.13.0 버전에서는 impala 자체적으로도 타임존을 변경할 수 없다. 어쨋든 from_utc_timestamp 함수를 이용해 쿼리 레벨에서 타임존 처리가 가능한데, 타임존 코드를 'KST'로 잘못 넣어서 오랫동안 […]
라즈베리 파이 4 * APM 홈서버 구축하기 2 – OS 설치 및 장치 설정
제품 구매에 이어 OS 설치 및 기본 환경을 설정한다. Ubuntu 18.04 LTS 설치 라즈베리 파이에서 공식적으로 지원하는 OS는 라즈비안이지만 기본 유틸 사용법이나 커뮤니티 등 개인적으로 친숙한 우분투를 선택했다. 다음 링크에서 바로 다운받을 수 있는데 Ubuntu 18.04.4 LTS for Raspberry Pi 4 다운로드 링크 http://cdimage.ubuntu.com/releases/18.04.4/release/ubuntu-18.04.4-preinstalled-server-arm64+raspi3.img.xz 위 링크가 만료가 되었다거나 다른 버전의 이미지를 다운받고자 하는 경우 공식 […]
라즈베리 파이 4 * APM 홈서버 구축하기 1 – 준비물
이번에 출시한 라즈베리 파이 4가 전작에 비해 비약적인 성능 개선이 이뤄졌다기에 찾아보니, 쿼드코어 CPU에 USB type-C 전원 단자와 USB3.0 포트가 기본 탑재되었고 메모리는 DDR4 1/2/4 GB의 선택지를 제공하고 있었다. 벤치마크 결과에서도 모든 처리능력에 있어 전작보다 월등히 향샹된 것을 확인할 수 있었는데 기글하드 라즈베리 파이 4 벤치마크 https://gigglehd.com/gg/hard/5134904 x86 데스크탑 CPU와 비교했을 때는 한참 부족하더라도 소비 […]
[Impala] ALL_TAB_COLUMNS for Impala (Hive)
현재 업무에서는 임팔라를 주력 데이터베이스로 활용하고 있다. 오라클 엑사 DW에서 하둡으로 ETL 한 뒤, 운영 DW에는 하기 부담스러운 헤비한 쿼리를 하는데에 사용한다. 원천이 오라클 데이터베이스인 탓에 소스 데이터베이스인 오라클과 주기적으로 스키마를 맞춰주어야 하는데, 오라클에는 ALL_TABLES, ALL_TAB_COLUMNS 와 같은 시스템 카탈로그가 있어, 테이블 스키마 관련 필요 정보를 쿼리해보기 좋았는데 임팔라에는 이런 시스템 카탈로그가 기본 제공되고 있지 […]
[Docker] 실행된 컨테이너에 shell 환경으로 접근하기
너무 단순한 명령어들이어서 기록의 가치가 없다고 생각했었는데, 한번 테스트 컨테이너를 제대로 구축한 이후에는 서비스 경로를 통해 접근하거나 sshd 를 통해서 쉘 환경에 접근하다보니 자꾸 까먹게되기도 하고 이참에 자세히 정리를 해두어야 겠다는 생각이 들어 써본다. docker 컨테이너의 sh 환경에 접근하기 위해서는 다음과 같은 방법을 사용할 수 있을 것 같다. 3.ssh 는 사실 컨테이너에 sshd 데몬을 띄워놓고 […]
[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 에서 추가로 로드하는 경우에 이런 상황이 발생할 수 있을 것 같다. 어쨋든 다음과 같은 에러가 발생하는 경우 […]
[Vim] Multi-line Search 로 여러 줄에 걸친 패턴 검색
Vim에서 여러줄에 걸쳐서 발생하는 패턴을 검색하기 위해서는 약간 다른 정규표현식을 사용해야한다. 메타문자 등이 있을 때 그 바로 앞에 \_ 문자열을 더해주면 되는데, 아래와 같이 자주 사용되는 표현을 예로 들자면 . ^ $ \s 다음과 같이 바꿔서 써줄 수 있고 \_. \_^ \_$ \_s [^A] 와 같은 문자열 클래스도 \_[^A] 로 변형해서 사용할 수 있다. 만약 […]