2010-12-03 2 views
5

У меня есть файл 5gig CSV (также как с.а.с файл данных, если это было бы проще), которые мне нужно положить в базу данных SQL, так что я могу работать с ним в R.UNIX Импорт БОЛЬШУЮ CSV в SQLite

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

Мой вопрос в том, как я могу импортировать файл csv в новую таблицу в моей базе данных с минимальной болью?

Я нашел вещи, говорящие, чтобы сначала создать вашу таблицу (включая указание всех переменных, из которых у меня 1000+), а затем с помощью таблицы «.import file» для ввода данных. Или, чтобы использовать некоторый мастер импорта gui, который не является для меня вариантом.

Извините, если это sql 101, но спасибо за помощь.

+1

С какой ОЗУ вы должны работать? – 2010-12-03 23:20:25

+0

Мы просто переключились на новый исследовательский кластер, поэтому мне нужно будет проверить с администратором специфику, но я верю, что с настройками задания по умолчанию я получаю 16 ГБ, и, конечно, я могу запросить больше по мере необходимости. – 2010-12-05 17:31:46

+0

просто не забудьте проверить также возможность оставить все в памяти. время от времени сохраняйте рабочее пространство из вашей программы. 16 ГБ более чем достаточно. Может быть намного быстрее и проще, и у вас есть возможность запросить больше оперативной памяти, если потребуется от оператора. (и вы используете LINUX, верно?) – mrsteve 2010-12-05 21:22:00

ответ

8

Вот мой рабочий процесс:

library("RSQLite") 
setwd("~/your/dir") 
db <- dbConnect(SQLite(), dbname="your_db.sqlite") ## will make, if not present 
field.types <- list(
     date="INTEGER", 
     symbol="TEXT", 
     permno="INTEGER", 
     shrcd="INTEGER", 
     prc="REAL", 
     ret="REAL") 
dbWriteTable(conn=db, name="your_table", value="your_file.csv", row.names=FALSE, header=TRUE, field.types=field.types) 
dbGetQuery(db, "CREATE INDEX IF NOT EXISTS idx_your_table_date_sym ON crsp (date, symbol)") 
dbDisconnect(db) 

field.types не нужно. RSQLite будет угадывать из заголовка, если вы не предоставляете этот список. Индекс также не требуется, но позже будет ускорен ваш запрос (если вы указали правильный столбец для своих запросов).

Я так много изучил этот материал здесь, поэтому, если вы проверите мои вопросы, заданные/ответившие на SQLite, вы можете найти некоторые материалы для аттестации.

4

Посмотрите на функцию «read.csv.sql» в пакете sqldf.

Это преобразует CSV-файл в базу данных SQLite, а затем считывает его в R, вы должны иметь возможность поддерживать промежуточную базу данных в своих целях.

Смежные вопросы