我正在寻找一种逻辑,它可以帮助我将字符串转换为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中返回类似值的哈希函数
答案 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