我加载从卡桑德拉一些简单的数据到猪。 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}
不过,如果我DUMP
data
,我得到的结果类似这样:
((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)
一下如果试图访问像一个元组的字段? EG'B = FOREACH数据GENERATE ISBN $ 0作为密钥,ISBN $ 1个自治值;' – mr2ert
试图像元组结果访问字段'类型chararray的一列内参照柱(一个或多个)不allowed' – Chad