Чтение только последних значений подряд через HBase get - PullRequest
0 голосов
/ 31 мая 2018

Учитывая эти данные:

row_key          cf1:c1           cf1:c2           timestamp
    ------------------------------------------------------------
    1              x                            t1
    1                               y           t2

HBase get возвращает и x, и y.Обычно я ожидаю, что он вернет только y (потому что это последняя отметка времени).Но это не то, что происходит.

Есть несколько альтернативных способов решения этой проблемы.

  1. Используйте get.setMaxVersions (1).Однако это не работает .
  2. Используйте get.setTimestamp (длинная временная метка).Однако это тоже не очень хорошая идея .
  3. Отключить управление версиями в таблице.Это то, что я собираюсь сделать, если нет лучшего решения.

Я надеюсь, что я просто упускаю простое / легкое решение.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Эта проблема может быть решена с помощью 'DependentColumnFilter', предоставленного HBase.DependentColumnFilter помогает читать только столбцы с последней отметкой времени.Таким образом, будут извлечены все столбцы, имеющие только последнюю временную метку.

Если вы просто просканируете таблицу hbase в оболочке hbase, вы все равно увидите столбец «null», имеющий значение, но временная метка будетстарый.

PS: этот фильтр должен применяться к столбцу, который будет не всегда пустым (в соответствии с вашей компанией).

0 голосов
/ 01 июня 2018

Я думаю, что версионирование здесь неправильно понято.Хотя версия (метаданные) поддерживается на уровне ColumnFamily, версии поддерживаются на уровне ячейки.Так что в вашем примере cf1: c1 имеет только одну версию, поэтому во время сканирования, очевидно, это будет ячейка последней версии.

Для более подробного объяснения, пожалуйста, обратитесь к приложенному скриншоту ниже.

enter image description here

  1. Мы по одной ячейке для cf1: c1и cf1: c2, как вы объяснили.
  2. Далее мы вставляем еще одну запись в cf1: c1, так что это создает другую ячейку и имеет метку времени последней версии.
  3. Так что если вы сканируетеВ таблице для нескольких версий вы можете увидеть, что cf1: c1 содержит две ячейки с разной версией
  4. Если вы получите только последнюю версию во время сканирования, вы получите «z» в качестве значения, поскольку оно имеет последнюю версиюячейка для cf1: c1

Я понял, просматривая версию HBase в документе , может быть, она вам тоже может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...