Самый быстрый способ извлечения, разделения и записи соответствующих данных в файл с использованием python и oracle db - PullRequest
0 голосов
/ 07 января 2020

Я пытался извлечь огромные порции данных из БД только для того, чтобы проанализировать и отделить их и записать в CSV-файлы, используя python. Данные довольно большие, и поэтому я решил поместить их во временный файл, в котором я бы выделил их и создал из них несколько CSV-файлов (я думал, что обработка такого большого количества данных будет утомительной для python, и именно поэтому этот дамп ). В настоящее время только запись данных во этот временный файл превышает временные ограничения, и я не могу даже начать с сегрегации. Я новичок здесь, предложите мне правильный способ go для этого. Я также могу попробовать разделить сразу после извлечения и сразу записать его в csvs, так что, если есть какой-то совет по этому поводу, он может работать хорошо для меня. Большая часть времени уходит на запись данных в файл EDIT. означает, что я должен разделять каждую запись на основе значения одного столбца, который извлекается с каждой записью.

cur = con.cursor()
file = open("Data_for_2_Days.text","w+")

print("Starting execution of query")
currentTime = datetime.datetime.now()
print("timestamp at the start of execution of query =  ")
print(currentTime)

result  = cur.execute(query)

print("query executed")
currentTime = datetime.datetime.now()
print("time after execution =  ")
print(currentTime)

print("beginning to write")
currentTime = datetime.datetime.now()

for item in result:
    file.write(str(item))

print("finished writing")
currentTime = datetime.datetime.now()
print("time after writing =  ")
print(currentTime)
file.close

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Если вы читаете ваши данные в pandas фрейм данных, то используйте pandas .Series.unique , чтобы получить уникальные значения столбца и использовать pandas. DataFrame.to_csv для сохранения в csv файлах

df  = #read the data to a dataframe named df

let cities будет именем столбца,

for city in df['cities'].unique():
    df[df['cities'] == city].to_csv('/path_to_folder/{}.csv'.format(city), index=False)
0 голосов
/ 07 января 2020

Во-первых, знаете ли вы, где вы проводите большую часть времени: выполнение запроса, получение данных или запись в файл? При выборке данных попробуйте установить размер массива курсора, например:

cur.arraysize=1000

Это должно улучшить время выборки. При этом, я не уверен, что это лучший способ сделать то, что вы сказали, что пытались сделать. Что именно вы подразумеваете под сегрегацией?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...