HiveQL字符串函数问题

时间:2017-04-03 09:11:31

标签: string hive hiveql

我正在使用HiveQL来运行以下查询。

意图是case语句从域的末尾删除最后的XX个字符,具体取决于后缀(.com,.co.uk)。

这似乎不起作用,因为输出中“domainnew”列中的字符串没有变化。

有人可以建议我如何做这项工作吗?

然后我还需要获取'domainnew'的输出并仅将字符放在第一个'。'的右侧。从正确的双手阅读。

= mobile.domain.facebook.com

domainnew = mobile.domain.facebook

newcalc = facebook

对此的任何建议都很棒!

谢谢

select domain, catid, apnid, sum(optimisedsize) as bytes, 

          CASE domain
            WHEN  instr(domain, '.co.uk')  THEN substr(domain,LENGTH(domain)-6) 
            WHEN  instr(domain, '.com')  THEN substr(domain,LENGTH(domain)-6) 
            ELSE domain
          END as domainnew

from udsapp.web

where dt = 20170330 and hour = 04 and loc = 'FAR1' and catid <> "0:0" group by domain, catid, apnid sort by bytes desc;

1 个答案:

答案 0 :(得分:1)

with t as (select 'mobile.domain.facebook.com' as domain) 

select  regexp_extract(domain,'(.*?)(\\.com|\\.co\\.uk|)$',1)      as domainnew  
       ,regexp_extract(domain,'.*?([^.]+)(\\.com|\\.co\\.uk|)$',1) as new_calc  

from    t
;
+------------------------+----------+
|       domainnew        | new_calc |
+------------------------+----------+
| mobile.domain.facebook | facebook |
+------------------------+----------+