如何在pig中过滤cassandra timeuuid/uuid

ijnw1ujt  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(377)

这是我的cassandra模式,使用datasax 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)
);

我想用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_id ,和 id 字段是二进制的,我需要通过一些uuid进行过滤,有什么建议吗?

w6mmgewl

w6mmgewl1#

您需要使用自定义项将uuid/timeuuid的二进制字节转换为chararray。不要像as(bucket:chararray,id:chararray,app\u id:chararray,event:chararray)那样直接将其定义为chararray;
或者你可以用https://github.com/cevaris/pig-dse/blob/master/src/main/java/com/dse/pig/udfs/abstractcassandrastorage.java 将uuid/timeuuid转换为字符串
如果您认为最好将uuid转换为字符串作为默认值,请提交一个cassandra票证。

91zkwejq

91zkwejq2#

能够使用自定义版本的cqlstorage udf pig loader解决问题。问题是cassandras cqlstorage/cassandrastorage清管器装载机不知道如何处理uuid/timeuuid类型。我假设大多数非标准数据类型都会发生这种情况。总之,这里是github上编码解决方案的链接。
https://github.com/cevaris/pig-dse

相关问题