0

HBase テーブル (私は HappyBase を使用しています) から行をフィルタリングしようとしています。具体的には、「id」が 1000 未満の行を取得しようとしています:

for key, data in graph_table.scan(filter="SingleColumnValueFilter('cf', 'id', <, 'binary:1000')"):
    print key, data

結果は次のとおりです。

<http://ieee.rkbexplorer.com/id/publication-d2a6837e67d808b41ffe6092db50f7cc> {'cf:type': 'v', 'cf:id': '100', 'cf:label': '<http://www.aktors.org/ontology/portal#Proceedings-Paper-Reference>'}
<http://www.aktors.org/ontology/date#1976> {'cf:type': 'v', 'cf:id': '1', 'cf:label': '<http://www.aktors.org/ontology/support#Calendar-Date>'}
<http://www.aktors.org/ontology/date#1985> {'cf:type': 'v', 'cf:id': '10', 'cf:label': '<http://www.aktors.org/ontology/support#Calendar-Date>'}

テーブルには、1 から 1000 までの「id」を持つ行があります。HBase Java ライブラリを使用してこれを Java でコーディングすると、整数値を Byte.toBytes() 関数で解析して正常に動作します。

ありがとうございました。

4

1 に答える 1

4

さて、問題は整数を文字列として保存していたことですが、正しい方法はそれらをバイトとして保存することです:

table.put(key, {'cf:id': struct.pack(">q", value)})

データベースにクエリを実行する場合、フィルターからの値もパックする必要があります。

for key, data in graph_table.scan(filter="SingleColumnValueFilter('cf', 'id', <, 'binary:%s', true, false)" % struct.pack(">q", 1000)):
     print key, data

最後に、結果をアンパックします。

value = struct.unpack(">q", data['cf:id'])[0]

どうもありがとうございました。

于 2014-04-24T07:46:32.230 に答える