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シェルでこれを行うにはどうすればよいですか?
そのため、非常に簡単であることがわかりました。スキャン範囲は包括的ではなく、ロジックはstart <= key <endです。答えは
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
HBaseの最近のバージョンでは、hbase Shellで次のことができます。
scan 'mytable', {ROWPREFIXFILTER => 'abc'}
これは効果的にこれを行います(そしてバイナリの状況でも機能します)
scan 'mytable', {STARTROW => 'abc', ENDROW => 'abd'}
このメソッドは、「PrefixFilter」アプローチよりもはるかに効率的です。後者は、このPrefixFilterクラスに存在する比較コードを介してすべてのレコードを処理するためです。
受け入れられたソリューションは、すべての場合に機能しません(バイナリキー)。さらに、PrefixFilterを使用すると、プレフィックスに達するまでテーブルスキャンが実行されるため、時間がかかる場合があります。よりパフォーマンスの高いソリューションは、STARTROWとFILTERを次のように使用することです。
scan 'my_table', {STARTROW => 'abc', FILTER => "PrefixFilter('abc')"}
必要なのはフィルターだと思う
次の質問の答えを確認してください HBase Shellを使用してフィルターでスキャン
より多くのフィルターは http://hbase.Apache.org/book/client.filter.html にリストされています