Что такое нешестнадцатеричные символы в HBase Shell RowKey?

Я сохраняю свой ключ как массив байтов. В HBase Shell, когда я смотрю на свой ключ, я вижу нешестнадцатеричные значения... У меня не включено кодирование, у меня не включено сжатие.

Вот пример... что такое VNQ? что такое толстушка? Я предполагаю, что происходит какое-то кодирование?

\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

person hba    schedule 20.02.2017    source источник


Ответы (1)


Оболочка HBase использует нечто, называемое «двоичной строкой» (экранированное шестнадцатеричное) представление байтовых массивов для вывода ключей/значений (см. метод Bytes.toStringBinary). Этот метод в основном делает одну из двух вещей для каждого байта:

  1. Преобразуйте его в печатное (ASCII) представление, если значение байта находится в допустимом диапазоне.
  2. Преобразуйте его в \xHH (где «H» представляет собой шестнадцатеричное число), если значение байта не находится в диапазоне ASCII.

Идея состоит в том, чтобы использовать печатное представление. Если бы все ваши ключи/значения были печатными символами, то оболочка не распечатала бы ни одну из этих странных последовательностей \xHH.

Если вместо этого вы предпочитаете шестнадцатеричное представление, попробуйте следующее в оболочке HBase:

> import org.apache.hadoop.hbase.util.Bytes
> Bytes.toHex(Bytes.toBytesBinary("\xFB\xC6\xE8\x03\xF0VNQ"))
> fbc6e803f0564e51

Вы можете изменить Ruby-оболочки оболочки hbase, чтобы использовать метод toHex() вместо toStringBinary() для вывода данных (или лучше; вы можете внести патч в HBase, чтобы включить флаг для двух вариантов, если хотите; см. руководство разработчика HBase).

person Ashu Pachauri    schedule 21.02.2017