2013-09-23 110 views
2

我想知道在cascalog中爲可能爲null的字段進行外連接時指定默認值的最佳方式是什麼。爲左外連接提供默認值

(def example-query 
    (<- [?id ?fname ?lname !days-active] 
     (users :> ?id ?fname ?lname) 
     (active :> ?fname ?lname !days-active)) 

在這個例子中用戶和活動將預先定義的查詢,我只是希望活動的用戶信息進行關聯(?FNAME?L-NAME!天激活)和普通用戶的信息(?ID?FNAME?LNAME )

因此,當如果是爲沒有相應的信息聯接發生了!天活性的零 即

392393 john smith 3 
003030 jane doe 0 

,而不是

它會輸出0,而不是
392393 john smith 3 
003030 jane doe null 

更新了例

(<- [!!database-id ?feature !!user-clicks !!engaged-users ?application-id ?active-users] 
        (app-id-db-id-feature-clicks-engaged :> ?application-id !!database-id ?feature !!user-clicks !!engaged-users) 
        (user-info :> ?application-id ?feature ?active-users))] 

例如輸出將看起來大致如下

4234 search null null 222 5000 
3232 profile 500 400 331 6000 

與我有興趣,我可以改變,這將是!!對於從事領域的過濾用戶和!!用戶點擊具有0而不是null。會使用多個謂詞有效嗎?

回答

1

我想你想要做的是增加一個or謂:

(def example-query 
    (<- [?id ?fname ?lname !days-active] 
     (users :> ?id ?fname ?lname) 
     (active :> ?fname ?lname !days-active) 
     (or !days-active 0 :> ?active-days))) 

這不是一個外部聯接,順便說一下,它只是沒有過濾掉在!days-active位置空變量。

+0

我更新了這個例子,以提供更多信息/更接近我的實際問題。你會使用一個或謂詞仍然工作? – mcgeep

+0

是的,我敢打賭,你可以編寫一個謂詞宏,它會擴展出來,讓你在一行中完成。應該很好走。 –

+0

謝謝你的幫助! – mcgeep