2017-04-03 71 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