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 पर हो सकता हूं, पता नहीं कैसे बताना है। FYI करें मुझे यह PR मिला है। एमडी 5 क्रॉस-प्लेटफ़ॉर्म होगा, जो अच्छा है, लेकिन मैं एक प्रेस्टो-आश्रित हैश फ़ंक्शन लेता हूं जो अपेक्षाकृत समान रूप से आईडी फैलाता है। मुझे लगता है कि मैं अपना खुद का रैखिक सूत्र लागू कर सकता हूं। अटपटा लगता है।

9
dfrankow 18 अगस्त 2016, 22:40

1 उत्तर

सबसे बढ़िया उत्तर

सबसे अच्छी बात जो मैं लेकर आ सकता था वह था पूर्णांक को एक वर्चर के रूप में डालना, फिर इसे 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)
16
Jan Dörrenhaus 31 अगस्त 2016, 14:18
यह बहुत अच्छा लग रहा है, लेकिन ऐसा करने से मुझे यह मिला: "_col0 [B@3bed3386"
 – 
dfrankow
30 अगस्त 2016, 16:52
Md5 varbinary में परिणाम देता है। आप इसे स्वयं हेक्स स्ट्रिंग में बदल सकते हैं। (संपादित देखें)
 – 
Jan Dörrenhaus
31 अगस्त 2016, 14:16