2013-08-22 31 views
1

我加载从卡桑德拉一些简单的数据到猪。 CqlStorage加载程序基于Cassandra模式定义模式,但似乎是错误的。CqlStorage使用<code>CqlStorage</code>产生错误的养猪模式

如果我做的:

data = LOAD 'cql://bookdata/books' USING CqlStorage(); 
DESCRIBE data; 

我得到这个:

data: {isbn: chararray,bookauthor: chararray,booktitle: chararray,publisher: chararray,yearofpublication: int} 

不过,如果我DUMPdata,我得到的结果类似这样:

((isbn,0425093387),(bookauthor,Georgette Heyer),(booktitle,Death in the Stocks),(publisher,Berkley Pub Group),(yearofpublication,1986)) 

显然,结果从Cassandra是关键/值对,正如预期的那样。我不知道为什么CqlStorage()生成的模式会如此不同。

这真是害我试图访问的列值的问题。我试过的FLATTEN荷兰国际集团每个元组一个幼稚的做法,然后试图访问值这样:

flattened = FOREACH data GENERATE 
    FLATTEN(isbn), 
    FLATTEN(booktitle), 
    ... 
values = FOREACH flattened GENERATE 
    $1 AS ISBN, 
    $3 AS BookTitle, 
    ... 

当我尝试访问现场$5,猪抱怨指数为出界。 (奇怪的是,flattened认为它具有相同的架构作为原始data。)

不知何故,CqlStorage似乎会产生错误的模式,以及架构一直持续到原始集合的预测。有什么办法可以解决这个问题吗?

(我使用卡桑德拉1.2.8和猪0.11.1)

+0

一下如果试图访问像一个元组的字段? EG'B = FOREACH数据GENERATE ISBN $ 0作为密钥,ISBN $ 1个自治值;' – mr2ert

+0

试图像元组结果访问字段'类型chararray的一列内参照柱(一个或多个)不allowed' – Chad

回答