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

时间:2017-07-29 09:13:07

标签: hash hive teradata

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

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

我的要求 - 假设我有列sender_country,接收国家/地区。我想为concat生成一个数字('sender_country','_','receiver_country') 如果国家/地区再次出现,则该数字应始终相同。

以下是插图

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_US重复一样,它具有相同的number

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

类似地,我们在配置单元中有hash()函数,但在TD中没有它的等效函数。

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

1 个答案:

答案 0 :(得分:1)

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

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

返回US,UK