2017-02-09 2 views
0

Я хочу рассчитать хэш для строк в улье без написания UDF только с использованием существующих функций. Чтобы я мог использовать подобный подход, чтобы получить согласованный хеш на других языках. например: существуют ли какие-либо функции, с помощью которых я могу сделать что-то вроде добавления символов или принятия Xor.Вычислить хеш без использования существующей хэш-функции в улье

+0

Ваше название говорит * «без использования exhit hash fuction» *, но ваш вопрос говорит * «только с использованием существующих функций» *, что является абсолютно противоположным. Что вы хотите, на самом деле? –

+0

Вы должны быть более конкретными относительно используемой вами версии Hive и других языков, на которые вы ссылаетесь, –

+0

«Чтобы я мог использовать аналогичный подход для получения согласованного хэша на других языках». Поэтому, если я использую существующую хеш-функцию, это не будет быть похожим, если я рассчитываю его на каком-то другом языке. Поэтому я хочу рассчитать простейший хеш, используя «другие» существующие функции, которые я также смогу повторить на других языках. Для Ex: я хочу bucketize строки, поэтому я могу сделать ASCII («abc»)% NoofBuckets, это даст мне ascii первого символа, но распределение по ведрам не будет таким хорошим. Поэтому мне нужно что-то более разумное. –

ответ

1

Это зависит от версии Улья, ср. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Misc.Functions

select XYZ, hash(XYZ) from ABC
был доступен в течение многих лет и применяется обычная старая java.lang.String.hashCode(), возвращая INT (32 бит хэша)

select XYZ, crc32(XYZ) from ABC
требует Hive 1,3 и применяется обычный старый Циклические Redundancy Check (вероятно, через java.util.zip.CRC32), возвращая BIGINT (32 бита хеш)

select XYZ, md5(XYZ), sha1(XYZ), sha2(XYZ,256), sha2(XYZ,512) from ABC
требует улей 1.3 и применяет сильные, криптографической хэш-функции, возвращая строку с шестнадцатеричное представление бинарных (128, 160, 256 и 512 битных хешей)

[Редактировать] ответ на that post также имеет очень хорошую обходной путь для применения криптографических хэш-функций с более старые версии Hive, используя статические методы Apache Commons и reflect().

Смежные вопросы