0

私は Hypertable::ThriftClient を使用しており、一括挿入にはミューテーターを使用しています。コード サンプルは次のとおりです。$master、$port、および $namespace はすべて定義されています。

Table:

show create table users; # Table schema is below

CREATE TABLE GROUP_COMMIT_INTERVAL "100" users (
    'column_name_fake' MAX_VERSIONS 1,
    ACCESS GROUP audience ('column_name_fake'),
)

:hypertable$ SELECT * FROM users limit 1; # displays
2342345 sf_following:1000234
2342346 sf_following:1234234

コード:

my $ht = new Hypertable::ThriftClient($master, $port);
my $ns = $ht->namespace_open($namespace);
my $users_mutator = $ht->mutator_open($ns, 'table_name', 2);

サブルーチン:

sub batch_insert {                                                                       
    my ($ht, $mutator, $column_family, $row, $val) = @_;

    my $keys;                                                                            
    my $cell;                                                                            
    try {                                                                                
        $keys = new Hypertable::ThriftGen::Key({
            row           => $row, 
            column_family => $column_family });

        $cell = new Hypertable::ThriftGen::Cell({key => $keys, value => $val});          
    }                                                                                    
    catch {                                                                              
        warn Dumper({ 'Error' => $_ });                                                  
    };                                                                                    
    $ht->mutator_set_cell($mutator, $cell);                                              
    $ht->mutator_flush($mutator);                                                        
    return 1;                                                                            
}                                                                                                                                                                                 

呼び出された関数:

for(.....) {    # Just for example
    batch_insert($ht, $users_mutator, '', $fs, "node:$node_u");
}

ここで例外が発生します。

 Hypertable::ThriftGen::ClientException=HASH(0x54d7380)

誰でも明確にできますか、なぜですか?

編集:より明確にするためにテーブル構造を追加しましたか?

4

2 に答える 2

1

ClientException クラスは次のように定義されています。

例外 ClientException { 1: i32 コード 2: 文字列メッセージ }

例外をキャッチして、コード (16 進数) とメッセージを出力してみてください。それは何が起こっているのかを特定するのに役立つはずです。

于 2013-06-26T05:51:20.893 に答える