web-dev-qa-db-fra.com

HBase (facile): Comment effectuer un scan de préfixe de plage dans le shell hbase

Je conçois une application à exécuter sur hbase et souhaite explorer de manière interactive le contenu de mon cluster. Je suis dans le shell hbase et je souhaite effectuer un scan de toutes les clés en commençant par les caractères "abc". Ces clés peuvent inclure "abc4", "abc92", "abc20014" etc ... J'ai essayé une analyse

hbase(main):003:0> scan 'mytable', {STARTROW => 'abc', ENDROW => 'abc'}

Mais cela ne semble rien retourner car il n'y a techniquement pas de clé de ligne "abc" uniquement des clés de ligne commençant par "abc"

Ce que je veux c'est quelque chose comme

hbase(main):003:0> scan 'mytable', {STARTSROWPREFIX => 'abc', ENDROWPREFIX => 'abc'}

J'entends que HBase peut le faire rapidement et est l'un de ses principaux arguments de vente. Comment faire cela dans le shell hbase?

28
David Williams

Cela s'avère donc très facile. Les plages de balayage ne sont pas inclusives, la logique est start <= key <end. La réponse est donc

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
47
David Williams

Dans les versions récentes de HBase, vous pouvez désormais le faire dans le shell hbase:

scan 'mytable', {ROWPREFIXFILTER => 'abc'}

Cela le fait efficacement (et fonctionne également pour les situations binaires)

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}

Cette méthode est beaucoup plus efficace que l'approche "PrefixFilter" car cette dernière place tous les enregistrements dans le code de comparaison qui est présent dans cette classe PrefixFilter.

30
Niels Basjes

La solution acceptée ne fonctionnera pas dans tous les cas (clés binaires). De plus, l'utilisation d'un PrefixFilter peut être lente car elle effectue une analyse de table jusqu'à ce qu'elle atteigne le préfixe. Une solution plus performante consiste à utiliser un STARTROW et un FILTER comme ceci:

 scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
22
Ben English

Je pense que vous avez besoin d'un filtre

consultez la réponse à la question suivante Scanner avec un filtre en utilisant HBase Shell

plus de filtres sont répertoriés dans http://hbase.Apache.org/book/client.filter.html

1
Mehul Rathod