Предполагая, что вы находитесь на SQL-сервере, вы можете обойти это, используя COALESCE
, например, так:
filler_value = -1
id <- tbl(conn, "My_Table") %>%
mutate(Elem1 = COALESCE(Elem1, filler_value),
Elem2 = COALESCE(Elem2, filler_value),
Elem3 = COALESCE(Elem3, filler_value)) %>%
filter(Elem1 == COALESCE(elem1, filler_value),
Elem2 == COALESCE(elem2, filler_value),
Elem3 == COALESCE(elem3, filler_value)) %>%
select(Id) %>%
collect()
Где filler_value
выбрано так, что оно имеет тот же тип данных (текст / цифра /date) в качестве столбцов набора данных, но не является значением, которое в настоящее время отображается в столбцах набора данных.
Функция COALESCE
возвращает первое ненулевое значение из списка аргументов.Итак, сначала мы заменим NULL
в столбцах Elem_
заполнителем, а затем заменим NULL
в значениях elem_
на тот же заполнитель.Следовательно, стандартное ==
сравнение имеет смысл.
Одна из ключевых идей здесь состоит в том, что, поскольку COALESCE
не имеет определенного перевода с R на SQL, он остается при переводе кода R на SQL,См. этот вопрос для получения дополнительной информации / альтернативы.