Hash 将字符串转换为数字的逻辑

Hash 将字符串转换为数字的逻辑,hash,hive,teradata,Hash,Hive,Teradata,我正在寻找一种逻辑,它将帮助我在teradata和hive中将字符串转换为数字 它应该很容易在Tearadata中实现,因为我没有在TD中部署UDF的权限。在hive中,如果不简单,我可以轻松地编写UDF 我的要求-假设我有发送国、接收国。我想为concat生成一个数字(“发送方国家”、“接收方国家”) 如果国家/地区再次出现,则数字应始终相同 下面是插图 UID sender_country receiver_country concat number 1 US

我正在寻找一种逻辑,它将帮助我在teradata和hive中将字符串转换为数字

它应该很容易在Tearadata中实现,因为我没有在TD中部署UDF的权限。在hive中,如果不简单,我可以轻松地编写UDF

我的要求-假设我有发送国、接收国。我想为concat生成一个数字(“发送方国家”、“接收方国家”) 如果国家/地区再次出现,则数字应始终相同

下面是插图

UID sender_country  receiver_country    concat  number
1   US              UK                  US_UK   198760
2   FR              IN                  FR_IN   146785
3   CH              RU                  CH_RU   467892  
4   US              UK                  US_UK   198760
一个国家的所有独特组合都应该具有独特的价值。像上面的例子一样,
US\u-US
是重复的,它有相同的对应的
编号

我在TD中尝试了
hashbucket(hashrow('concat'))
,但不知道它在hive中的等效实现

类似地,我们在hive中有
hash()
函数,但在TD中没有它的等价函数


我在TD和Hive中也找不到任何返回类似值的哈希函数

您只需将每个字符转换为一个数字:

Ascii(Substr(sender_country,1,1))*1000000+
Ascii(Substr(sender_country,2,1))*10000+
Ascii(Substr(receiver_country,1,1))*100+
Ascii(Substr(receiver_country,2,1))

对于
美国、英国

,返回
85838575
,但
国家代码
的大小不是固定的。例如,
country
列的值可能类似于
'IND'
times@RahulSinghvi:大多数公司要么使用标准化代码,要么使用2个或3个字母的ISO(甚至是不需要转换的3位ISO)。当你混合你会遇到问题,这应该在加载过程中修复。Teradata有MD5和BLAKE2 UDF可供使用,您可以与您的DBA交谈@dnoeth非常感谢您