Мне было интересно, как лучше всего указать значение по умолчанию при выполнении внешнего соединения в 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 вместо нуля. Будет ли работать использование нескольких предикатов Or?