我如何 运行 md5() 在 Presto 的 bigint 上?

How do I run md5() on a bigint in Presto?

select md5(15)

returns

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

如何对 15 进行哈希处理并取回字符串?我想 select 随机抽取 16 件商品中的 1 件,例如where md5(id) like '%3'.

仅供参考,我可能使用的是 0.147 版,不知道怎么说。 仅供参考,我发现 this PR。 md5 将是跨平台的,这很好,但我会采用依赖于 Presto 的散列函数来相对均匀地传播 id。我想我可以实现自己的线性公式。好像很别扭。

我能想到的最好的办法是将整数转换为 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)