使用过程中发现一个问题,使用hbase写入的int值,phonix读出不正确,反之也不正确。如下表:
Int值1 |
Hbae中存储 |
Hbase读 |
Phoenix读 |
Hbase写入 |
\x00\x00\x00\x01 |
1 |
-2147483646 |
Phoenix写入 |
\x80\x00\x00\x01 |
-2147483647 |
1 |
unsigned_int值1 |
Hbae中存储 |
Hbase读 |
Phoenix读 |
Hbase写入 |
\x00\x00\x00\x01 |
1 |
1 |
Phoenix写入 |
\x00\x00\x00\x01 |
1 |
1 |
Int值-1 |
Hbae中存储 |
Hbase读 |
Phoenix读 |
Hbase写入 |
\xFF\xFF\xFF\xFF |
-1 |
2147483647 |
Phoenix写入 |
\x7F\xFF\xFF\xFF |
2147483647 |
-1 |
结论一:对于unsigned_int,hbase和phoenx存储编码相同,可通用。Int型不通用。
分析:
计算机存储的是补码
正数的补码=原码
负数的补码=反码+1
反码:符号位不变,其他位取反
因此int数字1二进制是: