2014-03-03 28 views
2

這裏是我的卡珊德拉的架構,使用Datastax Enterprise如何篩選卡桑德拉TimeUUID/UUID豬

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),這裏是我的豬腳本。

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篩選,有什麼建議?

回答

1

您需要使用UDF轉換UUID/TimeUUID的二進制字節chararray。不要試圖將它直接定義爲chararray,就像AS(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爲String

文件一卡珊德拉票,如果你認爲這是很好的UUID轉換爲字符串作爲默認值。

+0

是的,你是對的。我遇到的下一個問題是如何試圖將轉換後的String UUID/TimeUUID存儲回UUID/TimeUUID類型中。由於我在Cassandra中使用CQL3,因此進行了類型檢查,它不喜歡UUID/TimeUUID的chararray版本。我假設我將不得不解析每個chararray以查看它是否是UUID/TimeUUID並在存儲之前將其轉換回來。我只是在Pig中放棄了UUID比較,然後繼續前進。 – cevaris

0

能夠使用定製版本的CQLStorage UDF Pig Loader解決。問題在於Cassandras CQLStorage/CassandraStorage Pig Loader不知道如何處理UUID/TimeUUID類型。我認爲這發生在大多數非標準數據類型上。無論如何,這裏是鏈接到github上的編碼解決方案。

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