2016-08-18 10 views
3
select md5(15) 

возвращаетКак запустить md5() в bigint в Presto?

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

Как хэш 15 и получить обратно строку? Я бы хотел выбрать 1 из 16 предметов в случайном порядке, например. where md5(id) like '%3'.

FYI Я могу быть на версии 0.147, не знаю, как сказать. FYI Я нашел this PR. md5 будет кросс-платформенным, что приятно, но я бы взял Presto-зависимую хеш-функцию, которая распространяла идентификаторы относительно равномерно. Полагаю, я мог бы реализовать свою собственную линейную формулу. Кажется неудобным.

ответ

4

Лучшее, что я мог придумать было отдать целое число как VARCHAR, а затем превратить его в VARBINARY через utf8, а затем применить md5 на VARBINARY:

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) 
+0

это выглядит здорово, но делает это в результате этого для меня: «_col0 [B @ 3bed3386» – dfrankow

+0

@dfrankow результаты md5 в VARBINARY. Вы можете превратить его в шестую строку самостоятельно. (см. править) –

+0

To_hex() работал для меня, принимал. Благодаря! – dfrankow