我正在使用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;
答案 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 |
+------------------------+----------+