169 похожих чатов

Никто не сталкивался с такой проблемой, что нужно выгрузить из

базы данных в R некий датасет, где в блоке WHERE одна из колонок будет указана через IN, и в нем несколько сотен или тысяч значений. Ну например надо вытянуть несколько тыс определенных клиентов по их id.

И вот у меня в R загружена таблица с вектором id этих клиентов. И можно ли как то подставить этот вектор, либо в запрос в R, либо в транслятор sql в dbplyr? Таким образом он отказывается это делать ((

clients <- tbl(bd, "clients") %>%
filter (client_id %in% from_1C$customer_id) %>%
select(2, 8, 9, 10) %>% show_query()

21 ответов

19 просмотров
Марк- Автор вопроса

По сути не важно, через dbplyr писать запрос или просто текстом на sql вложить его в скрипт. Главный вопрос, можно ли как то заставить R взять вектор из памяти самого R и превратить его в перечисление в IN, в запросе к бд?)

сформируйте простую строку с запросом с помощью glue и в него положите сконкатенированный в строку вектор идентификаторов типа такого glue('select * from x where y in ({ids})') а ids строка вида '123, 456, 789' вообще, если в in указывать сотни тысяч значений, это не очень хорошо для sql, проще приджойнить

Марк
По сути не важно, через dbplyr писать запрос или п...

Можно с помощью paste/paste0 собрать правую часть секции IN и отправить получившуюся длинную строку в запрос, который отправить в бд функцией dbSendQuery

Хотел идентичный вопрос написать.

Вопрос в другом, почему все эти манипуляции надо делать в R? лучше оставить data wrangling на стороне БД, насколько это возможно, а в R заниматься более сложными вещами

Марк- Автор вопроса
Дмитрий Володин
Вопрос в другом, почему все эти манипуляции надо д...

Потому что БД две. И одной я беру одни данные, и мне надо сравнить их с другой

Марк
По сути не важно, через dbplyr писать запрос или п...

А что если кинуть тестовый запрос с 3 значениями вместо 100 тысяч и проверить?)

Марк
Потому что БД две. И одной я беру одни данные, и м...

А, вы тут такими темпами в дата инженера на R превратитесь))

Марк- Автор вопроса
Байкулов Антон
А что если кинуть тестовый запрос с 3 значениями ...

не понял) Суть же в том, как скормить именно вектор из R)

Марк
Потому что БД две. И одной я беру одни данные, и м...

Если SQL Server, то он как-то умеет видеть другие sql server, точно не помню как. Прямо SSMS это можно настроить. То есть вы сможете в одном запросе обращаться к таблицам, лежащим на разных серверах

Когда то для себя писал функцию. Вектор со значениями (из дата сета можно достать через pull()) приводит в вид ('xxx','yyy','zzz') u_string<-function(x){ x %>% paste0("'",.,"'") %>% toString() %>% paste('(',.,')') } после этого можно прям xx %>% u_string()->z1 dbGetQuery(connetion,paste0( "select * from table where zz in",z1))

да не за что, можно просто пользоваться - смысл как выше подметили такой же, SQL запрос с точки зрения R - тупо текстовая стринга, все методы процедурной генерации текста - работают

Марк- Автор вопроса
Ivan Struzhkov
да не за что, можно просто пользоваться - смысл ка...

Да я собственно поэтому и очень удивился, когда dbplyr не 'съел' извлеченный вектор из data table фрейма. Отдельно поместил его в текстовый вектор - все заработало

Марк
Да я собственно поэтому и очень удивился, когда db...

В приведенном примере - ты не извлек вектор, ты сделал датафрейм с одним полем. Соотвествено и на то что это объект - и ругались все

Марк- Автор вопроса
Ivan Struzhkov
В приведенном примере - ты не извлек вектор, ты сд...

через $ же из дата фрейма извлекается именно вектор?

Марк
через $ же из дата фрейма извлекается именно векто...

Я ориентировался на код выше. давай repex разберем

Марк- Автор вопроса
Philipp Upravitelev
сформируйте простую строку с запросом с помощью gl...

Вот этот. Но я сегодня уже не опробую, спать уже скоро надо))

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта