【问题标题】:How do I run md5() on a bigint in Presto?如何在 Presto 的 bigint 上运行 md5()?
【发布时间】:2016-12-25 20:41:57
【问题描述】:
select md5(15)

返回

Query failed (#20160818_193909_00287_8zejd): line 1:8:
 Unexpected parameters (bigint) for function md5. Expected: md5(varbinary)

我如何散列 15 并取回一个字符串?我想随机选择 16 个项目中的 1 个,例如where md5(id) like '%3'.

仅供参考,我可能在 0.147 版上,不知道如何判断。 仅供参考,我找到了this PR。 md5 将是跨平台的,这很好,但我会采用一个依赖于 Presto 的散列函数,它可以相对均匀地传播 id。我想我可以实现自己的线性公式。看起来很别扭。

【问题讨论】:

    标签: sql md5 presto


    【解决方案1】:

    我能想到的最好的办法是将整数转换为 varchar,然后通过 utf8 将其转换为 varbinary,然后在 varbinary 上应用 md5:

    presto> select md5(to_utf8(cast(15 as varchar)));
                          _col0
    -------------------------------------------------
     9b f3 1c 7f f0 62 93 6a 96 d3 c8 bd 1f 8f 2f f3
    (1 row)
    

    如果这不是你得到的结果,你总是可以手动把它变成一个十六进制字符串:

    presto> select to_hex(md5(to_utf8(cast(15 as varchar))));
                  _col0
    ----------------------------------
     9BF31C7FF062936A96D3C8BD1F8F2FF3
    (1 row)
    

    【讨论】:

    • 看起来不错,但这样做对我来说是这样的:“_col0 [B@3bed3386”
    • @dfrankow md5 结果为 varbinary。你可以自己把它变成一个十六进制字符串。 (见编辑)
    猜你喜欢
    • 2013-11-18
    • 2021-01-08
    • 2019-09-30
    • 2019-12-14
    • 2018-10-07
    • 1970-01-01
    • 2018-10-20
    • 2019-08-18
    • 2021-03-13
    相关资源
    最近更新 更多