用于a/b测试的hive哈希

fnx2tebb  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(442)

我正在尝试将散列过程从mysql转换为hive。在配置单元中,我的代码失败,出现以下错误

ParseException line 6:7 cannot recognize input near '0xffffff' '>' '50' in expression specificati

如何在配置单元中写入十六进制数0xffffff
mysql代码(从这个参考中得到mysql逻辑http://blog.richardweiss.org/2016/12/25/hash-splits.html:

SELECT if(
   conv(
      substr(
          md5(concat(ID, '-', SALT)),
          1, 6),
      16, 10)/0xffffff > CONTROL_GROUP_SIZE, 't', 'c')

配置单元代码:

SELECT if(
   conv(
      substr(
          md5(concat('12345', '-','xxx2017')),
          1, 6),
      16,10)/0xffffff > 50, 't', 'c')
0s0u357o

0s0u357o1#

配置单元无法识别十六进制表示形式,从 0x ,就像在python中一样。所以,简单地使用 'ffffff' 相反。另外,由于您基本上是在进行十进制除法,因此可以添加另一个除法 conv 函数将其转换为十进制。

SELECT if(
   conv(
      substr(
          md5(concat('12345', '-','xxx2017')),
          1, 6),
      16,10)/conv('ffffff',16,10) > 50, 't', 'c')

相关问题