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

dfr*_*kow 7 sql md5 presto

select md5(15)
Run Code Online (Sandbox Code Playgroud)

回报

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

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

仅供参考我可能是0.147版本,不知道怎么说.仅供参考我找到了这个公关.md5将是跨平台的,这很好,但我会采用Presto相关的哈希函数,相对统一地传播ids.我想我可以实现自己的线性公式.看起来很尴尬.

Jan*_*aus 12

我能想到的最好的事情是将整数转换为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)
Run Code Online (Sandbox Code Playgroud)

如果这不是您得到的结果,您可以随时手动将其转换为十六进制字符串:

presto> select to_hex(md5(to_utf8(cast(15 as varchar))));
              _col0
----------------------------------
 9BF31C7FF062936A96D3C8BD1F8F2FF3
(1 row)
Run Code Online (Sandbox Code Playgroud)