如何在Pig中过滤Cassandra的TimeUUID/UUID

3

这是我的Cassandra架构,使用Datastax企业版

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)
);

我希望在PIG中通过app_id(TimeUUID)和id(UUID)来进行筛选,以下是我的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个回答

1

是的,你说得对。我遇到的下一个问题是如何将转换后的String UUID/TimeUUID存储回UUID/TimeUUID类型。由于我在Cassandra中使用的是CQL3,因此存在类型检查,它不喜欢UUID/TimeUUID的chararray版本。我想我必须解析每个chararray以查看它是否是UUID/TimeUUID,并在存储之前将其转换回来。我只是放弃了Pig中的UUID比较,并继续前进。 - cevaris

0

通过使用自定义版本的CQLStorage UDF Pig Loader,我成功解决了问题。问题在于Cassandra的CQLStorage/CassandraStorage Pig加载程序不知道如何处理UUID/TimeUUID类型。我认为这对于大多数非标准数据类型都会发生。无论如何,这是在github上编码解决方案的链接。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接