【问题标题】:Presto URL FunctionsPresto URL 函数
【发布时间】: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),""))。

标签: sql presto


【解决方案1】:

coalesce 函数解决了这个问题,url_extract_port 行改为:

,coalesce(cast(url_extract_port(link) AS VARCHAR),'')

如果端口不存在,url_extract_port 返回 null。因此,当与 coalesce 一起使用时,将返回默认值,在本例中为空字符串。

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 2017-12-17
    • 2015-08-08
    • 2020-07-13
    • 2020-07-27
    • 2020-09-29
    • 2020-03-21
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多