cassandra - 如何在 Pig 中过滤 Cassandra TimeUUID/UUID

标签 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 中过滤,这是我的 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 进行过滤,有什么建议吗?

最佳答案

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

或者您可以使用 https://github.com/cevaris/pig-dse/blob/master/src/main/java/com/dse/pig/udfs/AbstractCassandraStorage.java将 UUID/TimeUUID 转换为字符串

如果您认为将 UUID 转换为默认字符串很好,请提交 Cassandra 票证。

关于cassandra - 如何在 Pig 中过滤 Cassandra TimeUUID/UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22159722/

相关文章:

php - 通过 PHP 的 Pig 流

amazon-s3 - 使用 Spark 将 Cassandra 数据持久化到 S3 的最简单方法

hadoop - mapred.job.reduce.markreset.buffer.percent 的含义

java - Cassandra 自动完成不起作用

hadoop - Apache Pig弃用错误

java - Cassandra 3 中的 org.apache.cassandra.auth.Auth 去了哪里?

hadoop - 添加额外的列到一个已经存在的列

cassandra - Cassandra错误-无法限制“聚类”列(之前的列受非EQ关系限制)

python - cqlsh::ImportError:无法导入名称 cql_keywords_reserved

cassandra - 写入 Cassandra 时可以检测到冲突吗?