Python или R — создайте соединение SQL с помощью фрейма данных

#python #r #pandas #oracle #join

Вопрос:

Я пытаюсь найти способ, либо в R, либо в Python, использовать фрейм данных в качестве таблицы в инструкции Oracle SQL. Для моей цели непрактично:

  1. Создайте строку из столбца и используйте ее в качестве критерия (более 1 тыс., что является пределом).
  2. Создайте новую таблицу в базе данных и используйте ее (у вас нет доступа).
  3. Загрузите все содержимое таблицы и объедините в pandas (миллионы записей в базе данных и приведут к зависанию базы данных и моей системы).

Я нашел пакеты, которые позволят вам «зарегистрировать» фрейм данных и заставить его действовать как «таблица/представление», чтобы разрешить запросы к нему, но это не позволит использовать их в запросе с другой строкой подключения. Может ли кто-нибудь указать мне правильное направление? Либо разрешить два разных соединения в одной и той же инструкции SQL (для Oracle и пакета, такого как DuckDB), чтобы разрешить внутреннее соединение или прямую ссылку на фрейм данных и разрешить его использование в качестве таблицы в соединении?

SAS делает это так легко, и я не хочу возвращаться к SAS, потому что другие функции не так хороши, как Python / R, но это нарушит сделку, если я не смогу выполнять извлечение базы данных.

Комментарии:

1. Из ваших вариантов «не могу» я согласен: № 1 подвержен многим проблемам, а № 3-это метод грубой силы, который не следует применять. Тем не менее , #2-лучшее, что можно сделать (имхо), точка: вставьте локальный фрейм с несколькими строками значений, на основе которых вам нужно отфильтровать, а затем выберите из него присоединение к другим таблицам, которые вам нужны.

2. Если не считать перебора каждой строки вашего локального фрейма (возможно, неэффективного?), я полагаю, что ваши три ограничения оставили вас с пустой областью потенциальных решений.

3. У вас есть выбор: записать таблицу в Oracle SQL и выполнить объединение там или прочитать таблицу из oracle и выполнить объединение с помощью R или Pandas. Я не вижу ни одного варианта, который не включал бы один из этих двух.

4. У Oracle R Enterprise могут быть некоторые возможности, но у меня их нет, чтобы попробовать. Очевидный способ продолжить-использовать dbWriteTable in R для записи фрейма данных в Oracle, предполагая, что таблица на стороне Oracle намного больше, чем на стороне R.

5. Из вашей формулировки я не уверен, чего вы пытаетесь достичь, но возможным решением является установка вашей собственной базы данных (проверьте Oracle XE) — это даст вам недостающий доступ .

Ответ №1:

Отвечая здесь на мой собственный вопрос-после долгих исследований. Короче говоря, этого сделать невозможно. По ряду критериев, помимо списка или объединения, вы не можете создать фрейм данных в python или R и передать его через запрос в базу данных SQL Server или Oracle. К сожалению, но если у вас нет разрешений на запись во временные таблицы в базе данных Oracle, у вас нет вариантов.