Что такое не шестнадцатеричные символы в HBase Shell RowKey?
Я сохраняю свой ключ в виде байтового массива. В HBase Shell, когда я смотрю на свой ключ, я вижу не шестнадцатеричные значения... У меня нет включенной кодировки, у меня не включено никакое сжатие.
Вот пример... что такое VNQ? что такое BBW? Я предполагаю, что происходит какая-то кодировка?
\xFB\xC6\xE8\x03\xF0VNQ\x8By\xF6\x89D\xC1\xBBW\x00\x00\x00\x00\x00\x00\x01\xF3\x00\x00\x00\x00\x00\x07\xA1\x1F
1 ответ
Оболочка HBase использует нечто, называемое представлением байтовых массивов (двоичная строка) (Escaped hexadecimal) для вывода ключей / значений (см. Метод Bytes.toStringBinary). Этот метод в основном делает одну из двух вещей для каждого байта:
- Преобразуйте его в печатное представление (ASCII), если значение байта находится в пределах диапазона.
- Преобразуйте его в \xHH (где "H" представляет шестнадцатеричную цифру), если значение байта не находится в диапазоне ASCII.
Идея состоит в том, чтобы использовать печатное представление. Если бы все ваши ключи / значения были печатными символами, то оболочка не распечатала бы ни одну из этих странных последовательностей \ xHH.
Если вы предпочитаете Hex-представление, попробуйте следующее в оболочке HBase:
> import org.apache.hadoop.hbase.util.Bytes
> Bytes.toHex(Bytes.toBytesBinary("\xFB\xC6\xE8\x03\xF0VNQ"))
> fbc6e803f0564e51
Вы можете изменить оболочки ruby оболочки hbase, чтобы использовать метод toHex() вместо toStringBinary() для распечатки данных (или лучше; вы можете добавить патч в HBase, чтобы включить флаг для двух вариантов, если вам это нравится; см. Руководство разработчика HBase).