Hbase API(Get / Put)またはHBQL APIを使用して、特定の列のタイムスタンプを取得することは可能ですか?
4 に答える
クライアントが構成されていて、テーブルがセットアップされていると仮定します。getを実行すると、結果が返されます
Get get = new Get(Bytes.toBytes("row_key"));
Result result_foo = table.get(get);
結果はKeyValueによって裏付けられています。KeyValuesにはタイムスタンプが含まれています。list()を使用してKeyValueのリストを取得するか、raw()を使用して配列を取得できます。KeyValueにはgettimestampメソッドがあります。
result_foo.raw()[0].getTimestamp()
私は次の方が良いと思います:
KeyValue kv = result.getColumnLatest(family, qualifier);
String status = Bytes.toString(kv.getValue());
Long timestamp = kv.getTimestamp();
Result#getValue(family、qualifier)は次のように実装されているため
public byte[] getValue(byte[] family, byte[] qualifier) {
KeyValue kv = this.getColumnLatest(family, qualifier);
return kv == null ? null : kv.getValue();
}
@codingFooの回答は、すべてのタイムスタンプがすべてのセルで同じであると想定していますが、opの質問は特定の列に関するものでした。その点で、@ peibin wangの回答と同様に、列の最後のタイムスタンプが必要な場合は、次のことを提案します。
ResultオブジェクトでgetColumnLatestCellメソッドを使用してから、次のようにgetTimestamp
メソッドを呼び出します。
Result res = ...
res.getColumnLatestCell(Bytes.toBytes("column_family"), Bytes.toBytes("column_qualifier")).getTimestamp();
特定のタイムスタンプにアクセスする場合は、指定された列のすべてのセルを返すgetColumnCellsを使用できますが、その場合は、を含むセルから選択してからget(int index)
、を呼び出す必要があります。getTimestamp()
result_foo.rawCells()(0).getTimestamp
良いスタイルです