Hive의 기본 설정으로는 큰따옴표가 포함되어 있는 데이터는 읽을 수 없기 때문에 테이블에는 null로 저장됩니다. 예를 들어 csv 파일을 테이블에 업로드하려고 하는데 무수히 많은 로우에 큰따옴표가 불규칙하게 들어있고 해당 데이터를 Hive에 올리려고 할 때 이러한 문제가 생기면 난처한 상황 아래 놓이게 되는 것입니다. 물론 원천 데이터로 사용되는 csv 파일의 큰따옴표를 모두 제거할 수 있다면 쉽게 해결될 수 있겠지만, 그렇지 않은 경우에는 별도의 방법을 통해서 처리해야 합니다. 그리고 이때 필요한 것이 Serde(서데)를 사용하는 것입니다. Serde란 무엇인가?(+Serde 적용 예시) Hive는 파일 내 데이터를 읽을 때 Avro, ORC, Parquet, CSV 등의 파일포맷을 사용하고 역직렬..
이슈 Hive external table을 생성하면 테이블을 drop 하더라도 하둡에는 그 데이터가 남게 됩니다. 이렇게 되면 legacy 데이터가 남아있는 것 자체가 문제가 될 뿐만 아니라 추후 동일한 이름의 테이블을 생성하면 남아있던 하둡 파일 때문에 데이터가 그대로 들어있는 경우가 발생합니다. 이런 경우에는 기존 파일을 삭제하려고 HDFS 명령어를 실행해도 권한 문제로 삭제가 되지 않습니다. 해결방법 위와 같은 상황이 발생하지 않도록 external table은 drop 하기 전에 alter 명령어로 테이블의 external 속성을 변경하고 drop 시켜야 합니다. ALTER TABLE [TABLE_NAME] SET TBLPROPERTIES ('EXTERNAL' = 'FALSE'); 이렇게 테이블 ..
Impala는 쿼리를 빠르게 수행하기 위해서 Hive 테이블의 메타데이터의 카피를 캐시로 가지고 있는 구조를 띄고 있습니다. 이렇게 캐시화 되어 있는 메타데이터를 활용하는 특징 때문에 간혹 Impala 외부에서 데이터의 변경이 일어난 경우에 별도의 작업을 처리해야 Impala shell 혹은 쿼리를 사용할 때에도 Sync가 맞는 데이터를 확인할 수 있는데요. 이 때 진행하는 별도의 작업이 바로 REFRESH입니다. REFRESH는 어떤 명령어일까? REFRESH 명령어는 하이브 메타스토어(HMS)에서 테이블의 메타데이터를 다시 불러오고 파일과 HDFS Name node 블록의 메타데이터를 증분적재하는 동작을 수행합니다. 즉, Impala 외부의 데이터의 변경사항을 다시 읽어오는 동작인 것이죠. 언제 RE..
파티션별로 데이터를 적재하려고 할 때, 간혹 파티션키로 사용되는 기준 날짜 컬럼을 자정을 기준으로 날짜별로 분할하는 것이 아닌 임의의 시간대로 분할해서 적재해야 할 때가 있습니다. 그런 경우에는 기준 날짜 컬럼을 시간으로 변환하여 컬럼을 만들어야 하는데, 다음과 같은 쿼리로 처리할 수 있습니다. ▶ 시간대로 나누어서 파티션 분할 적재하는 방법 예제에서는 날짜별로 데이터를 분할(00:00 ~ 23:59)해서 파티션에 적재하는 것이 아니라 06:00 ~ 익일 05:59까지를 기준으로 데이터를 분할해서 파티션에 적재하는 작업을 수행할 때 사용하는 쿼리를 작성해보았습니다. 해당하는 방법을 구글에 검색해보면 날짜를 yyyy, mm, dd, hh로 쪼개고 다시 각각 group by로 묶어서 조건문을 사용하라는 등 ..
안녕하세요. 이번 시간에는 Hive의 파티션에 대해 사용할 수 있는 스크립트를 몇 가지 정리해보려고 합니다. Hive 테이블은 파티션으로 데이터를 분할해서 관리함으로써 데이터를 조회할 때 파티션으로 걸려있는 컬럼을 조건으로 추가해서 조회하면 조회 성능을 향상 시킬 수가 있고, 데이터 관리 측면에서도 파티션 단위로 관리할 수 있기 때문에 훨씬 용이합니다. ▶ 파티션 테이블 생성 먼저 파티션 테이블은 다음과 같은 쿼리로 생성할 수 있습니다. 1 2 3 4 5 6 7 8 9 CREATE EXTERNAL TABLE tb_sample ( userid string , createDateTime bigint ) PARTITIONED BY (month int, day int) -- 다중 레벨 파티션 -- PARTITI..
안녕하세요. 이번 포스팅에서는 빅데이터에 대한 전반적인 내용을 살펴보고, 데이터 엔지니어로 근무하고 있는 입장에서빅데이터를 어떻게 바라보고 있는지 다소 개인적인 의견들을 정리해보려고 합니다. 최근들어 빅데이터가 크게 화제가 되고 데이터의 중요성이 부각되고 있는 것처럼 보이지만, 사실 데이터는 원래부터 매우 중요한 것이었습니다. 데이터가 빅데이터이든, 그렇지 않든 데이터라는 것 자체가 굉장히 중요한 것이죠. 그런데 빅데이터가 화두에 오른 것은 기존에 기업에서 관리하고 있던 데이터가 이제는 기존에 유지하고 있던 방식으로 더 이상 저장하고 처리할 수 없는 양에 다다른 것입니다. 그래서 이렇게 많은 양의 데이터를 처리할 수 있는 기술과 방법론 등에 대해서 수요와 연구가 급증하였고, 자연스럽게 빅데이터라는 용어가..
안녕하세요. 이번 시간에는 날짜 디멘션(차원) 테이블을 만드는 쿼리를 알아보도록 하겠습니다. 날짜 디멘션 테이블은 데이터웨어하우스나 데이터마트를 구성할 때 반드시 필요한 테이블인 만큼 하나의 쿼리를 잘 만들어놓으면 언제든지 조금씩 응용하면서 활용할 수 있어 큰 도움이 될 것입니다. 먼저 테이블을 생성하는 DDL 스크립트를 먼저 만들어보았습니다. ▶ 테이블 생성 DDL 스크립트 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 --테이블 생성 쿼리(필요한 칼럼만 사용해서 생성하도록 합니다.) CREATE TABLE [dbo].[Dim..
안녕하세요. 임팔라에서도 여타 데이터베이스에서 활용했던 것처럼 쿼리 힌트(Query Hint)를 사용할 수 있습니다. 쿼리 힌트는 활용할 수 있는 통계가 없거나 성능이 안 좋은 쿼리에 대해서 성능을 일시적으로 개선하기 위한 방법으로 사용됩니다. 임팔라 쿼리 힌트 구문 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT STRAIGHT_JOIN col1, col2, ... FROM table1 JOIN [{BROADCAST|SHUFFLE}] table2 on table1.col1 = table2.col1; INSERT ... [{SHUFFLE|NOSHUFFLE}] SELECT ...; SELECT ... FROM table /* +{SCHEDULE_CACHE_LOCAL | S..
안녕하세요. 이번 시간에는 Impala의 실행계획에 대해서 살펴보도록 하겠습니다. 임팔라의 실행계획은 확인하고 싶은 쿼리의 앞에 EXPLAIN 명령을 붙여서 쿼리를 직접 실행하지 않고 실행계획을 확인하는 것이 가능합니다. 임팔라는 쿼리를 실행하기 전에 아래와 같은 사항들을 판단하고 쿼리를 실행하게 됩니다. ▶ 임팔라의 쿼리 실행 전 판단 내용 1. 어떤 데이터 노드의 로컬 저장소에서 어떤 데이터를 읽어 올 것인지 2. 다른 노드로 테이블 전체를 보낼 수 있을 정도로 작은 테이블은 어떤 테이블이 있는지 3. 다른 노드로 보내기에 너무 큰 테이블이라서 작게 분할해서 전송할 테이블이 있는지 4. 각각의 조인 단계에서 데이터를 전송하고 중간 결과를 최소화 할 수 있는 효율적인 작업 순서를 고려 출력된 실행계획은..
안녕하세요. 이번 포스팅에서는 임팔라를 활용해서 데이터를 처리할 때 메모리를 최적화해서 작업하는 방법에 대해서 살펴보도록 하겠습니다. 데이터베이스를 운영할 때와 마찬가지로 임팔라를 사용할 때에도 메모리를 최적화 하는 것이 전체 성능에 큰 영향을 주게 됩니다. 메모리 사용량을 증가시키는 일부 쿼리들이 있기 때문에 이 쿼리들을 사용할 때는 주의해서 사용해야 합니다. ▶ 메모리를 많이 사용하는 쿼리 1. ORDER BY: 정렬된 중간 결과를 원격 노드에 저장하기 위해서 메모리를 많이 사용하게 됩니다. 2. GROUP BY: 각 그룹 기준별로 중간 집계 결과의 데이터 구조를 메모리 내에 만들기 때문에 메모리를 많이 사용하게 됩니다. * GROUP BY 연산이 수행 될 때에 string 타입은 숫자 타입 연산보다..
안녕하세요. 이번 시간에는 Impala에 대해서 살펴보도록 하겠습니다. 임팔라(Impala)는 하둡 시스템에 동작하는 SQL이며 SQL을 다뤄본 사람들이라면 큰 어려움 없이 바로 임팔라를 활용한 쿼리를 작성할 수 있습니다. 출처: www.whizlabs.com/blog/hadoop-vs-sql-database/ 하지만 대량의 데이터를 처리하는 것에 최적화 되어 있는 하둡 파일 시스템에 동작하도록 구현되어 있기 때문에 DELETE / UPDATE와 같은 DML 연산은 지원이 되지 않고 인덱스, 제약조건, 외래 키는 사용할 수 없습니다. 따라서 제약조건을 통해서 ETL 작업 상의 오류를 검증하는 방식을 사용했다면 데이터 파이프라인 내에서 검증할 수 있는 다른 방식을 따라야 합니다. * 데이터웨어하우스를 운영..
▶ 아파치 임팔라(Apache Impala) 개요 아파치 임팔라(Apache Impala)를 한 문장으로 소개한다면 "하둡 기반의 데이터를 SQL을 사용해서 실시간 질의를 가능하게 해주는 시스템"이라고 말할 수 있습니다. 아파치 임팔라는 2012년 10월에 베타 버전으로 출시되었다가 이듬해인 2013년 5월에 정식 버전이 배포되었고 현재는 3.4버전까지 업데이트 되어 있습니다. 하둡 기반의 시스템에 SQL을 사용하기 위한 방법으로 이미 Hive가 존재하지만, 데이터에 접근하기 위해서 Hive는 MapReduce 프레임워크를 사용하는 반면, 임팔라는 실시간으로 데이터에 접근하기 위해서 임팔라 자체의 고유 분산 처리 엔진을 사용한다는 차이점이 있습니다. Apache Impala를 비롯해서 Apache Had..