cassandraに挑戦 その6 特定のcolumnの値だけを取得

cassandraで、以下のように3つのcolumnにデータセットされている場合、
cassandra> get Keyspace1.Super1['store1']['item1']
=> (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.
priceだけ値を取りたいときのperl codeが以下。

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
$VAR1 = [
          bless( {
                   'super_column' => undef,
                   'column' => bless( {
                                        'timestamp' => '1268052816239',
                                        'value' => '101',
                                        'name' => 'price'
                                      }, 'Net::Cassandra::Backend::Column' )
                 }, 'Net::Cassandra::Backend::ColumnOrSuperColumn' )
        ];
となり、priceだけ取得できています。
perl codeの、column_names部分のリストに、
レスポンスに含めたいcolumn_nameを追記すればその値だけが取れます。

人気の投稿