Presto 如何使用 Try_Parse

Posted

技术标签:

【中文标题】Presto 如何使用 Try_Parse【英文标题】:Presto How to use Try_Parse 【发布时间】:2020-05-20 07:46:09 【问题描述】:

在 Presto 中,我正在尝试使用给定的 formatString 解析为 Date,但是如果 String 与格式不匹配,查询失败。

select date_parse('2020-01-20T16:21:09.346Z', '%Y-%m-%dT%H:%i:%s.%fZ');

我在这里期望的是优雅的处理,因此如果 date_parse 方法失败,它将返回 null 或一些 默认值假如。

我怎样才能做到这一点?

【问题讨论】:

试试这个cloudjunkie.io/all-articles/2018/3/25/… @DeepakKumar 谢谢,你想回答吗,以便我接受。 【参考方案1】:

此链接解决了问题。

https://cloudjunkie.io/all-articles/2018/3/25/parsing-multiple-date-formats-in-athena#solution

    SELECT TestData.FormatId, 
        Coalesce(
            try(date_parse(TestData.MultiDateCol, '%Y-%m-%d %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%Y/%m/%d %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%Y/%m/%d')),
            try(date_parse(TestData.MultiDateCol, '%d %M %Y')),
            try(date_parse(TestData.MultiDateCol, '%d %M %Y %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%d/%m/%Y %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%d-%m-%Y %H:%i:%s'))
        )  as DateConvertedToTimestamp,
        TestData.MultiDateCol
    FROM
    (
    SELECT '2020-01-01 13:01:01' AS MultiDateCol, 'Format 1' AS FormatId
    UNION ALL
    SELECT '2020/01/02 13:01:02', 'Format 2'
    UNION ALL
    SELECT '2020/01/03', 'Format 3'
    UNION ALL
    SELECT '04 JAN 2020', 'Format 4'
    UNION ALL
    SELECT '05 JAN 2020 13:01:05', 'Format 5'
    UNION ALL
    SELECT '06/01/2020 13:01:06', 'Format 6'
    UNION ALL
    SELECT '07-01-2020 13:01:07', 'Format 7'
    ) AS TestData
    ORDER BY TestData.FormatId

【讨论】:

根据 SO 指南,请链接不是答案(例如,即使其他网站出现故障,答案也应该有用)。链接可以补充答案,但在这种情况下,最好直接链接到 Presto 文档:prestosql.io/docs/current/functions/conditional.html#try

以上是关于Presto 如何使用 Try_Parse的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 上使用 presto 连接到 Azure 数据湖存储?

如何在 regex_replace() 中使用 db 列名 - presto

Google Dataproc Presto:如何使用 Python 运行查询

如何从 Presto 中的日期获取月份名称

如何使用 Presto JSON 函数访问字段名称中带有“~”的 json 字段

如何在 Presto 中转义单引号?