Опция массовой загрузки, экспортирующая данные из R в Teradata с использованием RODBC

Я провел много исследований о том, как загружать огромные данные в .txt через R в Teradata DB. Я попытался использовать sqlSave() RODBC, но это не сработало. Я также ответил на некоторые другие подобные вопросы, например: Написать из R в Teradata в 3.0 ИЛИ Экспорт кадра данных на SQL-сервер с помощью Пакет RODBC ИЛИ Как быстро экспортировать данные с R на SQL Server.

Однако, поскольку структура Teradata каким-то образом отличается от структуры сервера MS SQL, большинство из предложенных вариантов не применимы к моей ситуации. Я знаю, что есть пакет TeradataR, но он не обновлялся примерно 2-3 года назад.

Итак, вот две мои основные проблемы, с которыми я столкнулся: 1. Как массово загрузить (все записи сразу) данные в формате .txt в Teradata с помощью R, если есть какой-либо способ. (До сих пор я пытался использовать для этого только SAS, но мне нужно изучить это в R) 2. Данные большие, например, 500+ МБ, поэтому я не могу загрузить их через R, я уверен, что есть способ обойти это но напрямую получать данные с сервера.

Вот что я пробовал в соответствии с одним из сообщений, но это было для сервера MS SQL:

toSQL = data.frame(...) #this doesn't work for me cause its too big.
write.table(toSQL,"C:\\export\\filename.txt",quote=FALSE,sep=",",row.names=FALSE,col.names=FALSE,append=FALSE);

    sqlQuery(channel,"BULK
                INSERT Yada.dbo.yada
                FROM '\\\\<server-that-SQL-server-can-see>\\export\\filename.txt'
                WITH
                (
                FIELDTERMINATOR = ',',
                ROWTERMINATOR = '\\n'
                )");

* Примечание: в Teradata есть опция для вставки / импорта данных, но это то же самое, что и запись миллионов строк инструкций Insert.

Извините, что на данный момент у меня нет примеров кодов, так как пакет, который я нашел, не тот, который мне следовало бы использовать.

У кого-нибудь есть подобные проблемы / проблемы?

Заранее большое спасибо за вашу помощь!


person lemonC    schedule 07.04.2017    source источник
comment
Используйте для этого утилиты Teradata - вам нужна мультизагрузка (mload).   -  person Andrew    schedule 07.04.2017


Ответы (1)


Я не уверен, поняли ли вы, как это сделать, но я второй вариант решения Эндрю. Если на вашем компьютере установлена ​​программа Teradata, вы можете легко запустить утилиту FastLoad из оболочки.

Итак, я бы:

  1. экспорт по фрейму данных в текстовый файл (через запятую)
  2. создайте мой сценарий fastload и вызовите экспортированный файл txt из сценария fastload (вы можете узнать об этом подробнее здесь)
  3. запустите команду оболочки, ссылающуюся на мой сценарий fastload.

    setwd("pathforyourfile")
    write.table(mtcars, "mtcars.txt", sep = ",", row.names = FALSE,quote= FALSE, na = "NA",col.names = FALSE)
    shell("fastload < mtcars_fastload.txt")
    

Я надеюсь, что это решит вашу проблему. Дайте мне знать, если вам понадобится помощь, особенно по сценарию быстрой загрузки. Более чем рад помочь.

person Aksel Etingu    schedule 13.03.2018