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?
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'}
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.
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')"}
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