用于 a/b 测试的蜂巢散列

hive hashing for a/b testing

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

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

如何在配置单元中写入十六进制数 0xffffff

MySQL 代码(从参考 http://blog.richardweiss.org/2016/12/25/hash-splits.html:

中得到 MySQL 逻辑
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')

Hive 无法识别十六进制表示,从 0x 开始,如 Python 中一样。因此,只需使用 'ffffff' 即可。此外,由于您实际上是在进行小数除法,因此您可以添加另一个 conv 函数将其转换为小数。

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