CqlStorage генерирует неправильную схему Pig

Я загружаю некоторые простые данные из Кассандры в Свинью, используя CqlStorage, CqlStorage loader определяет схему на основе схемы Cassandra, но, похоже, это неправильно.

Если я сделаю:

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 кажется, генерирует неправильную схему, и эта схема сохраняется в проекциях исходной коллекции. Есть ли способ обойти это?

(Я использую Cassandra 1.2.8 и Pig 0.11.1)

1 ответ

Решение

Это было решено для CCE: BinSedesTuple нельзя привести к String, применив исправление в https://issues.apache.org/jira/browse/CASSANDRA-5867.

Как Алекс Луи упомянул в своем билете:

git clone http://git-wip-us.apache.org/repos/asf/cassandra.git
cd cassandra
git checkout cassandra-1.2
patch -p1 < 5867-bug-fix-filter-push-down-1.2-branch.txt
ant
Другие вопросы по тегам