cassandraに挑戦 その6 特定のcolumnの値だけを取得
cassandraで、以下のように3つのcolumnにデータセットされている場合、
結果は、
perl codeの、column_names部分のリストに、
レスポンスに含めたいcolumn_nameを追記すればその値だけが取れます。
cassandra> get Keyspace1.Super1['store1']['item1']priceだけ値を取りたいときのperl codeが以下。
=> (column=title, value=ipod, timestamp=1267714302240)
=> (column=price, value=101, timestamp=1268052816239)
=> (column=description, value=ipod nano 8G / color:silver, timestamp=1268053455479)
Returned 3 results.
use strict;
use warnings;
use Data::Dumper;
use Net::Cassandra;
my $cassandra = Net::Cassandra->new( hostname => 'localhost' );
my $client = $cassandra->client;
my $key = 'store1';
eval {
my $what = $client->get_slice(
'Keyspace1',
$key,
Net::Cassandra::Backend::ColumnParent->new(
{ column_family => 'Super1',
super_column => 'item1',
}
),
Net::Cassandra::Backend::SlicePredicate->new(
{ column_names => ['price'] } # ここがポイント
),
Net::Cassandra::Backend::ConsistencyLevel::QUORUM
);
print Dumper($what);
};
die Dumper($@) if $@;
結果は、
$ perl get_slice.plとなり、priceだけ取得できています。
$VAR1 = [
bless( {
'super_column' => undef,
'column' => bless( {
'timestamp' => '1268052816239',
'value' => '101',
'name' => 'price'
}, 'Net::Cassandra::Backend::Column' )
}, 'Net::Cassandra::Backend::ColumnOrSuperColumn' )
];
perl codeの、column_names部分のリストに、
レスポンスに含めたいcolumn_nameを追記すればその値だけが取れます。