我想知道在cascalog中为外部连接指定默认值的最佳方法是什么,该字段可以为null。
(def example-query
(<- [?id ?fname ?lname !days-active]
(users :> ?id ?fname ?lname)
(active :> ?fname ?lname !days-active))
在此示例中,用户和活动将是先前定义的查询,我只是想关联活动用户信息(?fname?lname!days-active)和常规用户信息(?id?fname?lname)
因此,当连接发生时,如果没有相应的!days-active信息,则输出0而不是nil 即。
392393 john smith 3
003030 jane doe 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。使用多个或谓词会有效吗?
答案 0 :(得分: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
位置的空变量。