2017-04-03 43 views
1

我正在使用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
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 | 
+------------------------+----------+ 
+0

你,先生,是辉煌:) - 谢谢。 – Kieran