如何在Athena中从电子邮件地址提取域名?
在Athena中从邮箱地址提取域名的替代写法
你原来的MySQL风格代码里,SUBSTRING_INDEX是Athena(基于Presto SQL)不支持的函数,而strpos和SUBSTR在Athena中是可以正常使用的。下面提供两种等价的实现方式:
方法一:使用split_part(推荐)
split_part是Athena中专门用于按分隔符拆分字符串的函数,直接替换SUBSTRING_INDEX即可实现需求:
split_part(substr(sd_ccode, strpos(sd_ccode, '@') + 1), '.', 1) as Domain
逻辑说明:
substr(sd_ccode, strpos(sd_ccode, '@') + 1):截取@之后的所有字符(比如从user@example.com得到example.com)split_part(..., '.', 1):将截取后的字符串按.拆分,取第1部分(即example)
方法二:使用substr结合strpos
如果需要更底层的字符串截取控制,可以用两次substr实现:
substr( substr(sd_ccode, strpos(sd_ccode, '@') + 1), 1, strpos(substr(sd_ccode, strpos(sd_ccode, '@') + 1), '.') - 1 ) as Domain
逻辑说明:
- 第一步先截取
@之后的字符串 - 找到该字符串中第一个
.的位置,再从开头截取到该位置的前一位,得到目标域名
异常处理(可选)
如果存在不符合邮箱格式的记录(比如没有@或.),可以用coalesce避免返回null:
coalesce( split_part(substr(sd_ccode, strpos(sd_ccode, '@') + 1), '.', 1), sd_ccode ) as Domain
内容的提问来源于stack exchange,提问作者Muds
相关产品推荐
相关产品推荐

