Как использовать команду сканирования hbase-shell при хешировании ключа строки

Это предложение предназначалось для того, чтобы препятствовать пользователям использовать UDT для столбцов PK без разбора. Основная мотивация UDT в его нынешнем воплощении (то есть, учитывая, что Cassandra поддерживает «замороженный» UDT), предназначена для хранения более сложных значений внутри коллекций. Внешние коллекции UDT могут использовать его, но стоит вам дважды спросить, если вам это нужно. Например:

CREATE TYPE myType (a text, b int);

CREATE TABLE myTable (id uuid PRIMARY KEY, v frozen<myType>);

часто не очень разумно, поскольку вы теряете возможность обновления v.a без обновления v.b. Так что на самом деле это более гибко:

CREATE TABLE myTable (id uuid PRIMARY KEY, a text, b int);

. Этот тривиальный пример указывает, что UDT за пределами коллекций не всегда хорошо, и это также распространяется на первичные ключевые столбцы. Не обязательно лучше делать:

CREATE TYPE myType (a text, b int);

CREATE TABLE myTable (id frozen<myType> PRIMARY KEY);

более просто:

CREATE TABLE myTable (a text, b int, PRIMARY KEY ((a, b)))

Кроме того, что касается первичного ключа, любой сложный UDT, вероятно, не имеет смысла. Рассмотрим даже умеренно сложный тип, например:

CREATE TYPE address ( number int, street text, city text, phones set<text> )

Использование такого типа внутри первичного ключа почти наверняка не очень полезно, поскольку ПК идентифицирует строки и так 2 адреса, которые одинаковы, за исключением того, что набор телефонов не будет идентифицировать одну и ту же строку. Существует не так много ситуаций, когда это было бы желательно. В целом, PK имеет тенденцию быть относительно простым, и вы можете иметь мелкозернистый контроль над столбцами кластеризации, поэтому UDT редко бывают хорошими кандидатами.

Таким образом, UDT в столбцах PK не является всегда плохо, просто не часто полезно в этом контексте, и поэтому пользователям не следует пристально изучать способы использования UDT для столбцов PK только потому, что это разрешено.

1
задан IncompleteCoder 16 January 2019 в 13:51
поделиться

2 ответа

Ожидаете ли вы, что будет возвращен диапазон ключей? После того, как они хешированы, они больше не будут упорядочены так, как вы ожидаете, и поэтому сканирование может не выполнить то, что вы ожидаете. Боюсь, вам придется вручную хэшировать любые ключи, которые вы хотите получить заранее - оболочка HBase не может сделать это за вас.

0
ответ дан Ben Watson 16 January 2019 в 13:51
поделиться

Я ожидал бы иметь только одну запись, но это может быть диапазон.

scan 'mytablename',{FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(org.apache.hadoop.hbase.util.MD5Hash.getMD5AsHex(org.apache.hadoop.hbase.util.Bytes.toBytes('somekeyvalueprefix'))))}

Я обнаружил, что мы можем использовать классы hbase в командной строке. Однако я не получил ожидаемого значения.

0
ответ дан IncompleteCoder 16 January 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: