Presto URL 函数
Posted
技术标签:
【中文标题】Presto URL 函数【英文标题】:Presto URL Functions 【发布时间】:2018-05-16 05:18:03 【问题描述】:我需要从数据库中提取 url,在此过程中稍微重新格式化它们。 db 中的一些 URL 指定了端口号,有些则没有。我用的是 Presto 的方便的URL extraction functions,比如 url_extract_port。
但是,当以下 sql 遇到未指定端口的 url 时,它会返回 null - 即使对于实际上不是 null 的行也是如此。 (如果我删除 url_extract_port 函数,我会得到链接值,但没有端口。)
SELECT
concat(
url_extract_protocol(link)
,'://'
,url_extract_host(link)
,':'
,cast(url_extract_port(link) AS VARCHAR)
)
AS url
FROM db.schema.urltable
WHERE link is not null
有没有办法在 sql 中指定我只想在指定端口时使用 url_extract_port?
【问题讨论】:
一个案例表达式?case when url_extract_port(link) > 0 then x else y end
一个好主意。但我现在也想知道 coalesce(value1, value2) 在这里是否很好。除了第二个值是空白的。虽然也许没关系。
具体来说,我会尝试 cast(coalesce(url_extract_port(link),""))。
【参考方案1】:
coalesce 函数解决了这个问题,url_extract_port 行改为:
,coalesce(cast(url_extract_port(link) AS VARCHAR),'')
如果端口不存在,url_extract_port 返回 null。因此,当与 coalesce 一起使用时,将返回默认值,在本例中为空字符串。
【讨论】:
以上是关于Presto URL 函数的主要内容,如果未能解决你的问题,请参考以下文章