2016-02-11 1 views
0

Я хотел бы сохранить результат запроса красного смещения локально. Я попытался использовать blaze/odo, но с настройками по умолчанию, которые пытаются загрузить все данные в память, прежде чем писать и пытаться передать данные, бросает другие ошибки, описан еще один вопрос: Streaming results with Blaze and SqlAlchemyЗагрузка больших данных памяти в bcolz из Redshift

Поскольку у этого вопроса нет ответов, я ища альтернативный способ сделать это.

Что такое простой, надежный и разумно эффективный способ загрузки большего объема, чем результат запроса на память в bcolz от Redshift?

ответ

0

Я вижу, что это старый вопрос, но я отвечу ему, чтобы помочь, если кто-то с той же проблемой наткнется на него. Я предполагаю, что вы используете Blaze для доступа к Redshift. Вы должны будете разделить таблицу на некоторой колонке, и делать это итеративно, как это:

import blaze as bz 
table = bz.Data('postgresql://[email protected]::table_name') 
val_list = bz.odo(table['column_name'].distinct(), list) 
np_dtype = table.schema[0].to_numpy_dtype() 
for val in val_list: 
    table_partition = table[table['column_name'] == val] 
    partition_len = int(table_partition.count()) 
    bcolz.fromiter(table_partition, np_dtype, partition_len, 
        rootdir='rootdir_for_partition', mode='w', 
        cparams=compression_params) 

и чем использование bcolz.walk перебрать результат.