首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Hypertable赋值程序异常

Perl Hypertable赋值程序异常
EN

Stack Overflow用户
提问于 2013-06-26 11:42:29
回答 2查看 122关注 0票数 0

我正在使用Hypertable::ThriftClient,并使用mutator进行大量插入。以下是代码示例:$master、$port和$namespace都已定义。

代码语言:javascript
复制
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

代码:

代码语言:javascript
复制
my $ht = new Hypertable::ThriftClient($master, $port);
my $ns = $ht->namespace_open($namespace);
my $users_mutator = $ht->mutator_open($ns, 'table_name', 2);

子程序:

代码语言:javascript
复制
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;                                                                            
}                                                                                                                                                                                 

调用的函数:

代码语言:javascript
复制
for(.....) {    # Just for example
    batch_insert($ht, $users_mutator, '', $fs, "node:$node_u");
}

在这里我得到了一个异常,

代码语言:javascript
复制
 Hypertable::ThriftGen::ClientException=HASH(0x54d7380)

有没有人能解释清楚,为什么?

编辑:为了更清晰,我添加了表结构?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-28 10:34:10

代码语言:javascript
复制
FIX: So, this exception is raised is a required parameter 'column_qualifier' was not
     passed as per the table design. See below:

sub batch_insert {
    my ($ht, $mutator, $cf, $cq, $row, $val) = @_;
    my $keys = new Hypertable::ThriftGen::Key({
        row              => $row, 
        column_family    => $cf, 
        column_qualifier => $cq });

    my $cell = new Hypertable::ThriftGen::Cell({key => $keys, value => $val});
    $ht->mutator_set_cell($mutator, $cell);
    #$ht->mutator_flush($mutator);
}

Calling the above function:
--------------------------
batch_insert($ht, $users_mutator, 'column_family' , 'column_qualifier, 'row_key',  '');

它就像一个护身符一样起作用。如果你遇到类似的问题,请让我知道,我可以帮助你。我花了相当多的时间,阅读关于Thrift api的文章。

票数 0
EN

Stack Overflow用户

发布于 2013-06-26 13:51:21

ClientException类的定义如下:

异常消息{ 1: i32 ClientException 2: string message }

尝试捕获异常并打印出代码(十六进制)和消息。这应该有助于查明到底发生了什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17311160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档