BigQuery:Mod运算符在除以正整数时返回负结果

时间:2013-05-23 16:53:20

标签: google-bigquery sharding modulo

我有一个包含几个字段的表格。第一个字段是userId。我正在使用哈希函数通过userId对数据进行分片。

我正在运行以下查询:

SELECT userId, HASH(userId) as hashedId, HASH(userId) % 3 as hashedIdMod3
FROM mydataset.mytable LIMIT 1000

例如:

-5655326518438853587 % 3 ==> -1 when it should be 2
HASH(27315207816077732041734307321022553299) is -3139846784539570547 and the remainder is -2 when divided by 3 when it should be 1

那么,当除以正整数时,余数怎么能为负?

1 个答案:

答案 0 :(得分:1)

负数的mod在SQL(和c ++,java等)中是否定的。因此,您需要使用ABS() - 如:

SELECT userId, 
  HASH(userId) as hashedId, 
  ABS(HASH(userId) % 3) as hashedIdMod3
FROM mydataset.mytable LIMIT 1000