如何在Pig中过滤Cassandra TimeUUID / UUID

时间:2014-03-03 23:23:59

标签: cassandra apache-pig datastax-enterprise

这是我的Cassandra架构,使用Datastax Enterprise

CREATE KEYSPACE applications
  WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};

USE applications;

CREATE TABLE events(
  bucket text, 
  id timeuuid,
  app_id uuid,  
  event text, 
  PRIMARY KEY(bucket, id)
);

我想通过app_id(TimeUUID)和id(UUID)在PIG中 FILTER ,这是我的Pig脚本。

events = LOAD 'cql://applications/events'
  USING CqlStorage()
  AS (bucket: chararray, id: chararray, app_id: chararray, event: chararray);

result = FOREACH events GENERATE bucket, id, app_id;
DESCRIBE result;
DUMP result;

结果如下

result: {bucket: chararray,id: chararray,app_id: chararray}
(2014-02-28-04,?O]??4??p??M?,;??F? (|?Mb) \n
(2014-02-28-04,?O??4??p??M?,?h^@?E????)
(2014-02-28-04,?V???4??p??M?,;??F? (|?Mb)
(2014-02-28-04,?W?0?4??p??M?,?h^@?E????)
(2014-02-28-04,?X^p?4??p??M?,?h^@?E????)

请注意,app_idid字段是二进制的,我需要按一些UUID过滤,有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您需要使用UDF将UUID / TimeUUID的二进制字节转换为chararray。不要试图像AS一样直接将它定义为chararray(bucket:chararray,id:chararray,app_id:chararray,event:chararray);

或者您可以使用将{UUID / TimeUUID转换为字符串

https://github.com/cevaris/pig-dse/blob/master/src/main/java/com/dse/pig/udfs/AbstractCassandraStorage.java

如果您认为将UUID转换为字符串作为默认值,则提交Cassandra票证。

答案 1 :(得分:0)

能够使用自定义版本的CQLStorage UDF Pig Loader解决。问题是Cassandras CQLStorage / CassandraStorage Pig加载器不知道如何处理UUID / TimeUUID类型。我认为这适用于大多数非标准数据类型。无论如何,这里是github上编码解决方案的链接。

https://github.com/cevaris/pig-dse