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 函数的主要内容,如果未能解决你的问题,请参考以下文章

大数据Presto:Presto自定义函数和JDBC连接

在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”

Presto 中的用户定义函数

Athena (Presto) SQL 窗口函数

Presto 平均窗函数

等效于 hive 中 Presto 的 transform() 函数