web-dev-qa-db-ja.com

HBase(Easy):hbaseシェルで範囲プレフィックススキャンを実行する方法

Hbaseで実行するアプリを設計しており、クラスターのコンテンツをインタラクティブに探索したいと考えています。私はhbaseシェルを使用していますが、文字「abc」で始まるすべてのキーのスキャンを実行したいです。このようなキーには、「abc4」、「abc92」、「abc20014」などが含まれる場合があります。

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

しかし、技術的には「abc」で始まる行キーのみが存在するため、これは何も返さないようです。

私が欲しいのは

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

HBaseはこれを迅速に行うことができ、主なセールスポイントの1つであると聞いています。 hbaseシェルでこれを行うにはどうすればよいですか?

28
David Williams

そのため、非常に簡単であることがわかりました。スキャン範囲は包括的ではなく、ロジックはstart <= key <endです。答えは

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

HBaseの最近のバージョンでは、hbase Shellで次のことができます。

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

これは効果的にこれを行います(そしてバイナリの状況でも機能します)

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

このメソッドは、「PrefixFilter」アプローチよりもはるかに効率的です。後者は、このPrefixFilterクラスに存在する比較コードを介してすべてのレコードを処理するためです。

30
Niels Basjes

受け入れられたソリューションは、すべての場合に機能しません(バイナリキー)。さらに、PrefixFilterを使用すると、プレフィックスに達するまでテーブルスキャンが実行されるため、時間がかかる場合があります。よりパフォーマンスの高いソリューションは、STARTROWとFILTERを次のように使用することです。

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

必要なのはフィルターだと思う

次の質問の答えを確認してください HBase Shellを使用してフィルターでスキャン

より多くのフィルターは http://hbase.Apache.org/book/client.filter.html にリストされています

1
Mehul Rathod