HBaseからデータを新しい順に取ってきたい[できない]
最近、pythonでHBaseを触ったり何なりしています。
で、HBaseからデータを取り出したいんですけど、こう、データが順に並んでいるじゃないですか、そのうちの最新のものから順に取ってきたいんですよ。
まぁ、できてはいないんですけど、途中までのメモ(だれかが幸せになれますように。。できれば、教えてくれますように)
from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol from hbase import Hbase from hbase.ttypes import TScan transport = TSocket.TSocket('localhost', 9090) transport.open() transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) client = Hbase.Client(protocol) print(client.getTableNames()) #clientが持つテーブル名を表示
こんな感じでつながる訳です。
ここからテストデータを取り出したい訳ですけど、
table_name = 'test_table' #テーブル名の指定 row_start = 'test/0000000000000000.000000' #照合の最初の値 row_stop = 'test/9999999999999999.999999' #照合の最後の値 limit = 10 #取り出す件数 column = {} #取り出したいカラム名を指定 scan_id = client.scannerOpenWithStop(table_name, row_start, row_stop, column) #scanするIDを取得 items = client.scannerGetList(scan_id, limit) #複数件数のデータがあるときリストに保存 items = client.scannerGet(scan_id) #一つのデータがあるとき
ここでrow_startからrow_stopまでのデータをlimit分だけ取り出すのにrow_startの値から数え始めるので値が大きいものが最新のものだとすると区間の古いものから順に取り出されてしまうわけです。
これをなんとか逆順にしたい。
う〜ん。違うメソッドもあるんだけどそっち使うべきなのかなぁ。いちおうscannerOpenWithStopにはattribute与えれるから、その辺でなんとかできるのか。。。う〜ん。
ご教授願いたい。
[参考]
http://symfoware.blog68.fc2.com/blog-entry-312.html
http://d.hatena.ne.jp/otougarasi/20101130/1291103428