본문 바로가기

Hadoop/빅데이터 파일럿 프로젝트

탐색 파일럿 실행 4단계 - 탐색 기능 테스트


  • 빅데이터 탐색 개요
  • 빅데이터 탐색에 활용되는 기술
  • 탐색 파일럿 실행 1단계 - 탐색 아키텍처
  • 탐색 파일럿 실행 2단계 - 탐색 환경 구성
  • 탐색 파일럿 실행 3단계 - 탐색 기능 구현
  • 탐색 파일럿 실행 4단계 - 탐색 기능 테스트
    • 5개 주제 영역의 Mart 구성
    • SmartCar 상태 정보 데이터 생성 100대
    • SmartCar 상태 정보 적재 - 플럼을 통해 수집
    • SmartCar 운전자 운행 로그 데이터 생성 100대
      • HBase 적재 확인
      • 레디스 과속차량 확인
    • 주제영역 1. 스마트카 상태 정보 모니터링 - 워크플로 작성
    • 주제영역 2. 스마트카 운전자 운행 기록 - 워크플로 작성
    • 주제영역 3. 이상 운전 패턴 스마트카 정보 - 워크플로 작성
    • 주제영역 4. 긴급 점검이 필요한 스마트카 정보 - 워크플로 작성
    • 주제영역 5. 스마트카 운전자 차량 용품 구매 이력 정보 - 워크플로 작성

서버의 부하를 줄여주기 위해 사용하지 않는 것들은 중지!

  • CM 카프카, 플럼 중지
  • 모바텀에서 레디스 중지

서버2 - 모바텀에서 레디스 중지

휴 사이트 접속, 로그인

http://server02.hadoop.com:8888/


탐색 파일럿 실행 4단계 - 데이터탐색 기능 구현 및 테스트

  • 데이터 탐색 자동화와 마트 구성
  • External 적재 데이터 => Managed 통합 시키는 우지 워크플로우 잡
  • Managed 영역과 Mart 영역을 하나의 절차로 구성

5개 주제 영역의 Mart 구성

  • 주제 영역1: 스마트카의 상태 모니터링 정보
  • 주제 영역2: 스마트카의 운전자의 운행 기록 정보
  • 주제 영역3: 이상 운전 패턴 스마트카 정보
  • 주제 영역4: 긴급 점검이 필요한 스마트카 정보
  • 주제 영역5: 운전자의 차량용품 구매 이력 정보

주제 영영 1. 스마트카 상태 정보 모니터링 - 워크플로 작성

  • 하이브 External => Managed 영역으로 매일 옮기기
  • "스마트카 마스터 데이터"와 Join 통해 데이터 확장
  • 작업 QL : CH06/HiveQL
  • CM > Oozie > 시작
  • 휴 > 브라우저 > 문서 > 새문서 > 새 폴더
  • /workflow/hive_script/subject1~5 폴더 생성

  • subject1폴더로 이동 > 새문서 > Hive 쿼리
create table if not exists Managed_SmartCar_Status_Info (
car_number string,
sex string,
age string,
marriage string,
region string,
job string,
car_capacity string,
car_year string,
car_model string,
tire_fl string,
tire_fr string,
tire_bl string,
tire_br string,
light_fl string,
light_fr string,
light_bl string,
light_br string,
engine string,
break string,
battery string,
reg_date string
)
partitioned by( biz_date string )
row format delimited
fields terminated by ','
stored as textfile;

예제파일[그림-6.69.hql]을 쿼리가 있는 부분으로 끌어오면 입력이 된다.

 

  • create_table_managed_smartcar_status_info.hql 생성

  • 그림-6.69.hql > 저장
  • 기존 External영역의 smartcar_status_info, smartcar_master 칼럼으로 구성
  • subject1폴더로 이동 > alter_partition_smartcar_status_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.70.hql > 저장
  • 파티션 정보 추가
    alter table SmartCar_Status_Info add if not exists partition(wrk_date='${working_day}');

 

  • working_day 값은 Oozie의 Coordinator 매개변수 today 할당 값을 가져옴

빨간 동그라미 ->subject1폴더로 이동

  • subject1폴더로 이동 > insert_table_managed_smartcar_status_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.71.hql > 저장

< 그림-6.71.hql >

set hive.exec.dynamic.partition=true;  
set hive.exec.dynamic.partition.mode=nonstrict; 

insert overwrite table Managed_SmartCar_Status_Info partition(biz_date)  
select 
 t1.car_number,
 t1.sex,
 t1.age,
 t1.marriage,
 t1.region,
 t1.job,
 t1.car_capacity,
 t1.car_year,
 t1.car_model,
 t2.tire_fl,
 t2.tire_fr,
 t2.tire_bl,
 t2.tire_br,
 t2.light_fl,
 t2.light_fr,
 t2.light_bl,
 t2.light_br,
 t2.engine,
 t2.break,
 t2.battery,
 t2.reg_date,
 substring(t2.reg_date, 0, 8) as biz_date 
from  SmartCar_Master_Over18 t1 join SmartCar_Status_Info t2 
on t1.car_number = t2.car_number and t2.wrk_date = '${working_day}';
  • 동적 파티션 생성 시 하이브 환경 변수값 설정
  • set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict;
  • SmartCar_Master_Over18 , SmartCar_Status_Info 테이블 조인
    SmartCar_Master_Over18 t1 join SmartCar_Status_Info t2
더보기

JOIN 종류 4가지

1. inner

2. outer

3. left

4. right

 

JOIN을 특징으로 분류했을 때 2가지

1. 목차 의 성격

2. 색인 의 성격

기본 문법, 기본CRUD 

그룹바이, 조인 등 기본 쿼리는 개발자들도 알고 있어야 한다. 뷰까지.

좀 더 DB를 공부하고 싶으면 INDEX (빨리 검색하기 위한 목적) 정도까지.

 

 

  • 내부 조인은 이러한 테이블 간의 공통 영역 (위 다이어그램의 녹색 음영 영역), 즉 테이블 1과 테이블 2간에 공통된 모든 레코드를 반환합니다. 

 


 

 

 


어제 만든 테이블 잘 만들었는지 확인


  • 휴 > 쿼리 > 스케줄러 > Workflows > 편집기 > HiveServer2 스크립트

하이브 테이블 만들기

  • HiveSever2 스크립트 추가 > workflow/hive_script/subject1/create_table_managed_smartcar_status_info.hql 선택 후 추가

SmartCar_Status_Info 테이블에서 오늘 날짜로 파티션 정보 설정 작업

  • HiveSever2 스크립트 추가 > workflow/hive_script/subject1/alter_partition_smartcar_status_info.hql 선택 후 추가
  • 매개변수 연결 : working_day=${today}

managed_smartcar_status_info 테이블에 데이터 저장 하기

  • HiveSever2 스크립트 추가 > workflow/hive_script/subject1/ insert_table_managed_smartcar_status_info.hql 선택 후 추가
  • 매개변수 연결 : working_day=${today}

My Workflow => Subject 1 - Workflow 변경 후 > 저장

 

 

작성한 워크플로 작동을 위한 Schedule 생성

  • 휴 > 쿼리 > 스케줄러 > 예약
  • Subject 1 - Schedule 이름 변경
  • 워크플로 선택 > Subject 1 - Workflow선택

간격 > 옵션 > 스케줄 작성

  • 실행 간경: 매일, 01시
  • 시작일자: 2020년 09월 05일, 00시 00분
  • 종료일자: 2020년 09월 05일, 23시 59분
  • 시간대: Asia/Seoul
  • 매개변수 설정 : today / 매개변수 / ${coord:formatTime(coord:dateTzOffset(coord:nominalTime(),"Asia/Seoul"), 'yyyyMMdd')}
  • 저장 > 제출

작성한 워크플로 작동을 위한 Coodinator 확인

  • 휴 > Job > Job Browser > 일정

 

작성한 워크플로 바로 작동 시키기

  • 휴 > 상단 메뉴 > 문서 > Subject1 - Workflow 선택
  • 매개변수 설정 : today / 매개변수를 Hive managed_smartcar_status_info 테이블 wrk_date 값으로 직접 입력 > wrk_date=20220905
  • 저장 > 제출


 

주제 영역 2. 스마트카 운전자 운행 기록(실시간) - 워크플로 작성

  • Hive 로 smartcar_drive_info 조회

  • select * from smartcar_drive_info order by date desc limit 5;

  • 운전자 운행데이터(HBase) => 우지 워크플로워 => Managed Mart
  • 운전자 운행데이터와 스마트카 마스터 데이터를 조인해서 확장된 운행 데이터 생성
  • 작업 QL : CH06/HiveQL
  • 휴 > 상단 메뉴 > 문서 > workflow/hive_script/subject2

HBase 테이터를 Hive로 재구성 할 테이블

  • create_table_smartcar_drive_info_2.hql 생성
  • 파일 클리 > 우측 메뉴 > 파일 편집 > 그림-6.97.hql > 저장
create external table if not exists SmartCar_Drive_Info_2 (
  r_key string, 
  r_date string, 
  car_number string, 
  speed_pedal string, 
  break_pedal string, 
  steer_angle string, 
  direct_light string, 
  speed string, 
  area_number string
)
partitioned by( wrk_date string )
row format delimited
fields terminated by ','
stored as textfile
location '/pilot-pjt/collect/drive-log/'
  • insert_table_smartcar_drive_info_2.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.98.hql > 저장
set hive.exec.dynamic.partition=true;  
set hive.exec.dynamic.partition.mode=nonstrict; 

insert overwrite table SmartCar_Drive_Info_2 partition(wrk_date)  
select 
  r_key , 
  r_date , 
  car_number , 
  speed_pedal , 
  break_pedal , 
  steer_angle , 
  direct_light , 
  speed , 
  area_number ,
  substring(r_date, 0, 8) as wrk_date
from SmartCar_Drive_Info 
where substring(r_date, 0, 8) = '${working_day}';

 


운행정보와 스마트카 마스터 데이터 조인 테이블

  • create_table_managed_smartcar_drive_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.99.hql > 저장
  • insert_table_managed_smartcar_drive_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.100.hql > 저장

 

워크플로 만들기

  • 휴 > 쿼리 > 스케줄러 > Workflows > 편집기 > HiveServer2 스크립트

하이브 테이블 만들기

  • HiveSever2 스크립트 추가 > workflow/hive_script/subject2/create_table_smartcar_drive_info_2.hql 선택 후 추가
  • HiveSever2 스크립트 추가 > workflow/hive_script/subject2/insert_table_smartcar_drive_info_2.hql 선택 후 추가
  • 매개변수 연결 : working_day=${today}
  • HiveSever2 스크립트 추가 > workflow/hive_script/subject2/create_table_managed_smartcar_drive_info.hql 선택 후 추가
  • HiveSever2 스크립트 추가 > workflow/hive_script/subject2/insert_table_managed_smartcar_drive_info.hql 선택 후 추가
  • 매개변수 연결 : working_day=${today}

My Workflow => Subject 2 - Workflow 변경 후 > 저장

 

작성한 워크플로 작동을 위한 Schedule 생성

  • 휴 > 쿼리 > 스케줄러 > 예약
  • Subject 2 - Schedule 이름 변경
  • 워크플로 선택 > Subject 2 - Workflow선택

간격 > 옵션 > 스케줄 작성

  • 실행 간경: 매일, 02시
  • 시작일자: 2020년 09월 05일, 00시 00분
  • 종료일자: 2020년 09월 05일, 23시 59분
  • 시간대: Asia/Seoul
  • 매개변수 설정 : today / 매개변수 / ${coord:formatTime(coord:dateTzOffset(coord:nominalTime(),"Asia/Seoul"), 'yyyyMMdd')}
  • 저장 > 제출

작성한 워크플로 작동을 위한 Coodinator 확인

  • 휴 > Job > Job Browser > 일정

작성한 워크플로 바로 작동 시키기

  • 휴 > 상단 메뉴 > 문서 > Subject2 - Workflow 선택
  • 매개변수 설정 : today / 매개변수를 Hive managed_smartcar_drive_info 테이블 wrk_date 값으로 직접 입력 > wrk_date=20220908
  • 저장 > 제출

 


정리

  • 매일 N시 스마트카 운전자 운행 데이터 => 하이브 테이블로 이전
  • 다른 테이블과 조인을 통해 상세정보를 추가해 확장된 마트 데이터 생성

주제 영역 3. 이상 운전 패턴 스마트카 정보 - 워크플로 작성

  • 스마트카 운전자의 운행 기록을 분석하여 과속, 급제동, 급회전이 빈번한 차량들을 스코어링한 마트 데이터 생성(
  • 과속과 급제동의 경우 당일의 차량별로 가속 페달과 브레이크 페달의 평균값 계산
  • 관련 표준편차 값은 과거 모든 데이터를 대상으로 산출
  • 과속/급제동 표준값이 각각 "2" 이상인 차량의 경우만 "비정상"으로 판단
  • 급회전의 경우 당일 기준 Left/Right 회전각 "2~3" 단계를 "1000"번 이상인 경우 "비정상"으로 지정
  • 작업 QL : CH06/HiveQL
  • 휴 > 문서 > workflow/hive_script/subject3

스마트카 운전자들의 운행정보에서 이상 패턴 관리 테이블

  • create_table_managed_smartcar_symptom_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.102.hql > 저장

 

<그림-6.102.hql >

create table if not exists Managed_SmartCar_Symptom_Info (
car_number string,
speed_p_avg string,
speed_p_symptom string,
break_p_avg string,
break_p_symptom string,
steer_a_cnt string,
steer_p_symptom string,
biz_date string
)
row format delimited
fields terminated by ','
stored as textfile;

 

 

  • insert_table_managed_smartcar_symptom_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.103.hql > 저장

<그림-6.103.hql >

insert into table Managed_SmartCar_Symptom_Info  
select 
       t1.car_number,
       t1.speed_p_avg_by_carnum,
       case
         when (abs((t1.speed_p_avg_by_carnum - t3.speed_p_avg) / t4.speed_p_std))  >  2 
           then 'abnormal'
         else   'normal'
       end
       as speed_p_symptom_score,
       t1.break_p_avg_by_carnum,
       case
         when (abs((t1.break_p_avg_by_carnum - t3.break_p_avg) / t4.break_p_std))  >  2 
           then 'abnormal'
         else   'normal'
       end
       as break_p_symptom_score,
       t2.steer_a_count,
       case
         when (t2.steer_a_count)  >   2000
           then 'abnormal'
         else   'normal'
       end
       as steer_p_symptom_score,
       t1.biz_date
from 
       (select car_number, biz_date, avg(speed_pedal) as speed_p_avg_by_carnum, avg(break_pedal) as break_p_avg_by_carnum from managed_smartcar_drive_info where biz_date =  '${working_day}'  group by car_number, biz_date) t1
join 
       (select car_number, count(*) as steer_a_count from managed_smartcar_drive_info where steer_angle in ('L2','L3','R2','R3') and biz_date =  '${working_day}'  group by car_number) t2
on 
       t1.car_number = t2.car_number ,
       (select avg(speed_pedal) as speed_p_avg, avg(break_pedal) as break_p_avg from managed_smartcar_drive_info ) t3,
       (select stddev_pop(s.speed_p_avg_by_carnum) as speed_p_std, stddev_pop(s.break_p_avg_by_carnum) as break_p_std from 
                (select car_number, avg(speed_pedal) as speed_p_avg_by_carnum, avg(break_pedal) as break_p_avg_by_carnum from managed_smartcar_drive_info group by car_number) s) t4

 

 

 

가속 패달

case
         when (abs((t1.speed_p_avg_by_carnum - t3.speed_p_avg) / t4.speed_p_std))  >  2
           then '비정상'
         else   '정상'
       end

- 컬럼에 있는 데이터로 연산을 해서 '비정상'인 값과 '정상'인 값을 만든다

 

브레이크 패달

case
         when (abs((t1.break_p_avg_by_carnum - t3.break_p_avg) / t4.break_p_std))  >  2
           then '비정상'
         else   '정상'
       end

 

운전대

case
         when (t2.steer_a_count)  >   1000
           then '비정상'
         else   '정상'
       end

 

  • Job Browser 모니터링시 7개의 잡과 10개의 맵리듀스가 실행, 무거운 작업
  • 워크플로 만들기
  • 휴 > 쿼리 > 스케줄러 > Workflows > 편집기

하이브 테이블 만들기

  • HiveSever2 스크립트 추가 > workflow/hive_script/subject3/create_table_managed_smartcar_symptom_info.hql 선택 후 추가
  • HiveSever2 스크립트 추가 > workflow/hive_script/subject3/insert_table_managed_smartcar_symptom_info.hql 선택 후 추가
  • 매개변수 연결 : working_day=20220908

My Workflow => Subject 3 - Workflow 변경 후 > 저장작성한 워크플로 작동을 위한 Schedule 생성

  • 휴 > 쿼리 > 스케줄러 > 예약
  • Subject 3 - Schedule 이름 변경
  • 워크플로 선택 > Subject 3 - Workflow선택

간격 > 옵션 > 스케줄 작성

  • 실행 간경: 매일, N시
  • 시작일자: 2022년 09월 14일, 00시 00분
  • 종료일자: 2022년 09월 21일, 23시 59분
  • 시간대: Asia/Seoul
  • 매개변수 설정 : today / 매개변수 / ${coord:formatTime(coord:dateTzOffset(coord:nominalTime(),"Asia/Seoul"), 'yyyyMMdd')}
  • 저장 > 제출

작성한 워크플로 작동을 위한 Coodinator 확인

  • 휴 > Job > Job Browser > 일정

작성한 워크플로 바로 작동 시키기

  • 휴 > 상단 메뉴 > 문서 > Subject3 - Workflow 선택
  • 매개변수 설정 : today / 매개변수를 Hive managed_smartcar_symptom_info 테이블 wrk_date 값으로 직접 입력 > wrk_date=20220908
  • 저장 > 제출

 

managed_smartcar_symptom_info 차트로 데이터 탐색

  • 그림6.105 하이브 쿼리 실행 결과 > 차트 실행
SELECT
    car_number,
    cast(speed_p_avg as int),
    speed_p_symptom,
    cast(break_p_avg as float),
    break_p_symptom,
    cast(steer_a_cnt as int),
    steer_p_symptom,
    biz_date
FROM managed_smartcar_symptom_info
where biz_date = '20191127'

과속/난폭 운전 가능성 예상 차량 찾기

  • 차트 > 막대 , x축 car_number, y축 speed_p_avg

급정지/난폭 운전 가능성 예상 차량 찾기

  • 차트 > 막대 , x축 car_number, y축 break_p_avg

운전대 비정상 패턴 차량 찾기

  • 차트 > 막대 , x축 car_number, y축 steel_a_cnt


정리

  • 이상 운행 패턴을 보이는 운전자는 가속 폐달, 브레이크 페달, 운전대 사용이 모두 비정상
  • 3개의 변수(가속 폐달, 브레이크 페달, 운전대)는 서로 연관성이 높다는 사실을 알수 있음
  • 하이브의 단순 기술 통계량으로 이상 징후 차량 탐색
  • 하이브만 잘 활용해도 적재된 대량 데이터를 이용해 기술적 통계와 탐색적 분석석을 수행해 가치 있는 분석 가능

주제 영역 4. 긴급 점검이 필요한 스마트카 정보 - 워크플로 작성

  • 타이어, 라이트, 브레이크, 엔진, 베터리 등을 분석
  • 긴급 점검이 필요한 스마트카 차량 리스트 찾기
  • "긴근 점검 차량" 마트를 만드는 시간은 많이 들지만 이후 빠르게 마트 조회
  • 작업 QL : CH06/HiveQL
  • 휴 > 문서 > /workflow/hive_script/subject4

스마트카 장비의 상태를 관리하기 위한 테이블

  • create_table_managed_smartcar_emergency_check_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.110.hql > 저장
  • insert_table_managed_smartcar_emergency_check_info.hql 생성
  • 파일 클릭 > 우측 메뉴 > 파일 편집 > 그림-6.111.hql > 저장

 

타이어 점검

left outer join ( select
                               car_number,
                               avg(tire_fl) as tire_fl_avg ,
                               avg(tire_fr) as tire_fr_avg ,
                               avg(tire_bl) as tire_bl_avg ,
                               avg(tire_br) as tire_br_avg ,
                               '타이어 점검' as symptom
                       from managed_smartcar_status_info where biz_date ='${working_day}'
                       group by car_number
                       having  tire_fl_avg < 80 or tire_fr_avg < 80 or  tire_bl_avg < 80 or tire_br_avg < 80 ) t2  
on t1.car_number = t2.car_number

라이트 점검

left outer join ( select
                                distinct car_number,
                                '라이트 점검' as symptom
                       from managed_smartcar_status_info
                       where biz_date = '${working_day}' and (light_fl = '2' or light_fr = '2' or light_bl = '2' or light_br = '2')) t3
on t1.car_number = t3.car_number

엔진 점검

left outer join ( select
                               distinct car_number,
                              '엔진 점검' as symptom
                       from managed_smartcar_status_info
                       where biz_date = '${working_day}' and engine = 'C' ) t4
on t1.car_number = t4.car_number

브레이크 점검

left outer join ( select
                               distinct car_number,
                               '브레이크 점검' as symptom
                       from managed_smartcar_status_info
                       where biz_date = '${working_day}' and break = 'C' ) t5

on t1.car_number = t5.car_number

배터리 점검

left outer join (select
                                car_number,
                                avg(battery) as battery_avg,
                                '배터리 점검' as symptom
                       from managed_smartcar_status_info where biz_date = '${working_day}'
                       group by car_number having battery_avg < 30 ) t6
 on t1.car_number = t6.car_number

워크플로 만들기

  • 휴 > 쿼리 > 스케줄러 > Workflows > 편집기

하이브 테이블 만들기

  • HiveSever2 스크립트 추가 > workflow/hive_script/subject4/create_table_managed_smartcar_emergency_check_info.hql 선택 후 추가
  • HiveSever2 스크립트 추가 > workflow/hive_script/subject4/insert_table_managed_smartcar_emergency_check_info.hql 선택 후 추가
  • 매개변수 연결 : working_day=20220906

My Workflow => Subject 4 - Workflow 변경 후 > 저장

작성한 워크플로 작동을 위한 Schedule 생성

  • 휴 > 쿼리 > 스케줄러 > 예약
  • Subject 4 - Schedule 이름 변경
  • 워크플로 선택 > Subject 4 - Workflow선택

 

간격 > 옵션 > 스케줄 작성

  • 실행 간경: 매일, 04시
  • 시작일자: 2020년 09월 05일, 00시 00분
  • 종료일자: 2020년 09월 05일, 23시 59분
  • 시간대: Asia/Seoul
  • 매개변수 설정 : today / 매개변수 / ${coord:formatTime(coord:dateTzOffset(coord:nominalTime(),"Asia/Seoul"), 'yyyyMMdd')}
  • 저장 > 제출

 

작성한 워크플로 작동을 위한 Coodinator 확인

  • 휴 > Job > Job Browser > 일정

작성한 워크플로 바로 작동 시키기

  • 휴 > 상단 메뉴 > 문서 > Subject1 - Workflow 선택
  • 매개변수 설정 : today / 매개변수를 Hive managed_emergency_check_info 테이블 wrk_date 값으로 직접 입력 > wrk_date=20220905
  • 저장 > 제출

 

긴급 점검 대상 차량 확인

SELECT * from managed_smartcar_emergency_check_info WHERE biz_date = '20200904';

정리

  • 긴급 점검 대상 차량을 판단하는 것은 주관적
  • 과거의 긴급 점검이 실제 이뤄진 차량의 이력 정보과 지속적인 데이터 탐색을 한다면 신뢰도 상승
  • 빅데이터는 저장 공간과 컴퓨팅 파워에 대한 제약이 적으므로 과거 데이터를 최대한 많이 적재해 분석 정확도 향상 가능

더보기

sql에서 조건문을 담당하는 쿼리인 having과 where의 차이를 알아본다.

Where

select * from 테이블명 where 조건절

위와 같은 방법으로 where 조건절을 사용한다. 항상 from뒤에 위치하고 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있다.

having

select * from 테이블명 group by 필드명 having 조건절

위와 같은 방법으로 having 조건절을 사용한다. 항상 group by뒤에 위치하고 where 조건절과 마찬가지로 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있다.

차이점

where은 기본적인 조건절로서 우선적으로 모든 필드를 조건에 둘 수 있다.
하지만 having은 group by 된 이후 특정한 필드로 그룹화 되어진 새로운 테이블에 조건을 줄 수 있다.

즉, 전체 테이블 자체에서 쿼리를 수행하고 싶다면 where를, 전체 테이블을 그룹화 한뒤, 그 해당 그룹에서 어떠한 조건을 걸어 가져오고 싶다면 having을 사용한다.

 

출처 : https://wansook0316.github.io/cs/database/2020/04/25/where-having-%EC%B0%A8%EC%9D%B4.html


주제 영역 5. 스마트카 운전자 차량 용품 구매 이력 정보 - 워크플로 작성

  • 스마트카 차량용품 구매 이력과 스마트카 마스터 데이터를 결합한 데이터셋 생성
  • SmartCar_Master_Over18 join SmartCar_Item_Buylist
  • 동적 파티션은 월단위로 생성
  • 차량번호별 구매한 상품 리스트를 로컬 파일시스템에 생성
  • 작업 QL : CH06/HiveQL
  • 휴 > 문서 > /workflow/hive_script/subject5

스마트카 차량용품 구매 이력과 스마트카 마스터 데이터 조인 테이블

  • create_table_managed_smartcar_item_buylist.hql 생성
  • 파일 클리 > 우측 메뉴 > 파일 편집 > 그림-6.113.hql > 저장
  • insert_table_managed_smartcar_item_buylist.hql 생성
  • 파일 클리 > 우측 메뉴 > 파일 편집 > 그림-6.114.hql > 저장

차량별 상품 구매 리스트 결과 파일 생성 스크립트

  • local_save_managed_smartcar_item_buylist.hql 생성
  • 파일 클리 > 우측 메뉴 > 파일 편집 > 그림-6.115.hql > 저장
  • collect_set() 함수를 이용해 차량번호별로 그루핑한 결과를 하나의 상품리트로 재구성

워크플로 만들기

  • 휴 > 상단 메뉴 > Workflows > 편집기 > 워크플로 > 생성 > 선택

하이브 테이블 만들기

  • HiveSever2 스크립트 추가 > workflow/hive_script/subject5/create_table_managed_smartcar_item_buylist.hql 선택 후 추가
  • HiveSever2 스크립트 추가 > workflow/hive_script/subject5/insert_table_managed_smartcar_item_buylist.hql 선택 후 추가
  • HiveSever2 스크립트 추가 > workflow/hive_script/subject5/local_save_managed_smartcar_item_buylist.hql 선택 후 추가

My Workflow => Subject 5 - Workflow 변경 후 > 저장

작성한 워크플로 작동을 위한 Schedule 생성

  • 휴 > 쿼리 > 스케줄러 > 예약
  • Subject 5 - Schedule 이름 변경
  • 워크플로 선택 > Subject 5 - Workflow선택

간격 > 옵션 > 스케줄 작성

  • 실행 간경: 매일, 05시
  • 시작일자: 2020년 09월 05일, 00시 00분
  • 종료일자: 2020년 09월 05일, 23시 59분
  • 시간대: Asia/Seoul
  • 저장 > 제출

작성한 워크플로 작동을 위한 Coodinator 확인

  • 휴 > Job > Job Browser > 일정

작성한 워크플로 바로 작동을 확인

  • 편집 워크플로에서 바로 제출
  • 데이터 생성 확인
select * from managed_smartcar_item_buylist_info
where biz_month = '202003'
  • 차량 번호별로 그루핑된 상품 리스트 파일 생성 확인
  • more /home/pilot-pjt/item-buy-list/00000_0