2

我想知道在 cascalog 中为可能为空的字段执行外连接时指定默认值的最佳方法是什么。

 (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

通过我感兴趣的过滤,我可以将 !!engaged-users 和 !!user-clicks 的字段更改为 0 而不是 null。使用多个Or谓词会起作用吗?

4

1 回答 1

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位置的空变量。

于 2013-09-23T18:50:04.430 回答