#r #oracle-sqldeveloper
#r #oracle-sqldeveloper
Вопрос:
У меня есть запрос, который содержит около 2000000 записей в таблице. Я хочу экспортировать все эти записи из таблицы в файл CSV. Но файл CSV позволяет мне одновременно загружать не более 200000 файлов. Моя конечная цель — взять все эти записи и сформировать фрейм данных в R для дальнейшего анализа.
Комментарии:
1. 2 миллиона строк — это много данных, возможно, вам даже будет сложно загрузить их в R за один раз. Рассматривали ли вы возможность экспорта случайного подмножества данных, скажем, 10%?
2. Я еще не рассматривал это. Но мне бы потребовались все данные для анализа. Есть ли способ разбить ее на фрагменты, а затем экспортировать или загрузить?
3. Вы думали об использовании
RODBC
библиотеки для прямого подключения к Oracle?4. Да , я пытался . Но чтобы использовать это, мне пришлось бы добавить источник данных в ODBC Data Source Admin . Я ввожу данные своего сервера и пытаюсь, но во время тестового подключения происходит сбой соединения. (Ошибка: Тайм-аут соединения)
5. В принципе, это ваши варианты; вы либо импортируете CSV-файлы, либо напрямую переносите всю таблицу во фрейм данных через ODBC.
Ответ №1:
У SQL Developer нет ограничений на размер экспортируемого CSV-файла.
Вот пример таблицы в CSV, содержащей 2 500 000 записей.
CREATE TABLE so_2m (
x INT,
y DATE
);
BEGIN
FOR i IN 1..2500000 LOOP
INSERT INTO so_2m VALUES (
i,
SYSDATE
);
END LOOP;
END;
/
commit;
select count(*) from so_2m;
Table SO_2M created.
PL/SQL procedure successfully completed.
Commit complete.
COUNT(*)
----------
2500000
А теперь давайте сделаем запрос и экспортируем в CSV
А теперь давайте посмотрим на экспорт, а затем подсчитаем количество строк в файле.
В моем CSV-файле 2 500 001 строка. Первая строка — это заголовок списка имен столбцов.
Мой Mac Mini 2018 года выпуска с Oracle VirtualBox под управлением Database 18c EE и SQL Developer версии 18.4 сгенерировал этот файл примерно за 2 минуты.
Комментарии:
1.
insert into so_2m select rownum, sysdate from dual connect by level <= 2500000
это может сэкономить вам несколько строк кода2. @ConnorMcDonald да, я знаю, но я был слишком занят, чтобы не думать 🙂