복붙노트

[HADOOP] 돼지에서 CASE 문

HADOOP

돼지에서 CASE 문

나는 몇 가지 조건에 따라 '지오'에서 'vertex_code'을 추출하기 위해 노력하고 있습니다 :

SUBSTRING(geocode,0,2) ----> Code
00-51 ----> 01
70    ----> 03
61-78 ----> 04
Else ----> 00

이제 수득 '코드'값은 'vertex_code'를 형성하는 단부 (접미사) 00와 연결 다시 '지오'값 (프리픽스) 및와 연결되어야

예 : 지오 = 44556677

SUBSTRING (지오 0,2)는 다음 코드 00-51 = 01 사이에 있다면

따라서 vertex_code = 014,455,667,700

다음은 내 스크립트입니다 :

item = load '/user/item.txt' USING PigStorage('|') AS (load_id:chararray, record_type:chararray, geocode:chararray);

newitem = FOREACH item GENERATE load_id, record_type,
(CASE (SUBSTRING(geocode,0,2))
 WHEN 00-51 THEN 'CONCAT(01,CONCAT(geocode,00))'
 WHEN 70 THEN 'CONCAT(03,CONCAT(geocode,00))'
 WHEN 61-78 THEN 'CONCAT(04,CONCAT(geocode,00))'
 ELSE 'CONCAT(00,CONCAT(geocode,00))'
 END) AS vertex_code;

DUMP newitem;

나는 아래의 오류가 발생합니다 :

도움에 감사드립니다.

해결법

  1. ==============================

    1.당신은 비교 다음 int로하고 캐스팅해야

    당신은 비교 다음 int로하고 캐스팅해야

    newitem = FOREACH item GENERATE load_id, record_type,
    (CASE 
     WHEN ((int)SUBSTRING(geocode,0,2) <= 51  THEN CONCAT('01',CONCAT(geocode,'00'))
     WHEN ((int)SUBSTRING(geocode,0,2) = 70 THEN CONCAT('03',CONCAT(geocode,'00'))
     WHEN ((int)SUBSTRING(geocode,0,2) >= 61 and ((int)SUBSTRING(geocode,0,2) <=78 THEN CONCAT('04',CONCAT(geocode,'00'))
     ELSE CONCAT('00',CONCAT(geocode,'00'))
     END) AS vertex_code;
    
    DUMP newitem;
    
  2. from https://stackoverflow.com/questions/48503572/case-statement-in-pig by cc-by-sa and MIT license