を使用して、Cassandra から Pig にいくつかの単純なデータをロードしていCqlStorage
ます。ローダーはCqlStorage
Cassandra スキーマに基づいてスキーマを定義しますが、それは間違っているようです。
私が行った場合:
data = LOAD 'cql://bookdata/books' USING CqlStorage();
DESCRIBE data;
私はこれを得る:
data: {isbn: chararray,bookauthor: chararray,booktitle: chararray,publisher: chararray,yearofpublication: int}
ただし、 I の場合DUMP
data
、次のような結果が得られます。
((isbn,0425093387),(bookauthor,Georgette Heyer),(booktitle,Death in the Stocks),(publisher,Berkley Pub Group),(yearofpublication,1986))
Cassandra からの結果は、当然のことながらキーと値のペアです。CqlStorage()
によって生成されたスキーマがなぜそれほど異なるのかわかりません。
これにより、列の値にアクセスしようとすると問題が発生します。FLATTEN
私は各タプルを ing する単純なアプローチを試み、その方法で値にアクセスしようとしました:
flattened = FOREACH data GENERATE
FLATTEN(isbn),
FLATTEN(booktitle),
...
values = FOREACH flattened GENERATE
$1 AS ISBN,
$3 AS BookTitle,
...
field にアクセスしようとするとすぐに$5
、ピッグはインデックスが範囲外であると文句を言います。(不思議なことにflattened
、元の と同じスキーマを持っていると思いますdata
。)
どういうわけか、CqlStorage
間違ったスキーマを生成しているようで、そのスキーマは元のコレクションの射影に残ります。これを回避する方法はありますか?
(Cassandra 1.2.8 と Pig 0.11.1 を使用しています)