34

hbase で実行するアプリを設計しており、クラスターのコンテンツを対話的に探索したいと考えています。hbase シェルを使用していて、文字 "abc" で始まるすべてのキーのスキャンを実行したいと考えています。そのようなキーには、「abc4」、「abc92」、「abc20014」などが含まれる可能性があります...スキャンを試みました

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

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

私が欲しいのは次のようなものです

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

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

4

4 に答える 4

56

したがって、非常に簡単であることがわかります。スキャン範囲は包括的ではなく、ロジックは開始 <= キー < 終了です。だから答えは

scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
于 2013-07-09T21:46:21.120 に答える
44

HBase の最近のバージョンでは、hbase シェルで次のことができるようになりました。

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

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

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

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

于 2016-07-28T09:19:04.540 に答える
26

承認されたソリューションがすべての場合に機能するとは限りません (バイナリ キー)。さらに、PrefixFilter を使用すると、プレフィックスに到達するまでテーブル スキャンが実行されるため、処理が遅くなる可能性があります。より効率的な解決策は、次のように STARTROW と FILTER を使用することです。

 scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
于 2015-10-30T16:00:25.463 に答える
1

必要なのはフィルターだと思います

次の質問の回答をチェックアウト HBase シェルを使用してフィルターでスキャンする

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

于 2013-07-09T21:37:53.557 に答える