2016-11-22 1 views
0

Мы создали запрос в BigQuery, который возвращает SKU и корреляции между ними. Что-то вроде:Как сохранить порядок строк облачных хранилищ Google в сжатых файлах

sku_0,sku_1,0.023 
sku_0,sku_2,0.482 
sku_0,sku_3,0.328 
sku_1,sku_0,0.023 
sku_1,sku_2,0.848 
sku_1,sku_3,0.736 

В результате миллионы строк, и мы экспортировать его в Google Cloud Storage, который приводит в нескольких сжатых файлов.

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

Мы попытались использовать тот факт, что наши первые столбцы SKU уже заказаны и не должны применять этот заказ внутри нашего приложения.

Но тогда мы только что обнаружили, что файлы, которые мы получаем из GCS, меняют порядок, в котором появляется skus.

Похоже, что файлы создаются несколькими процессами, считывая результаты и сохраняя их в разных файлах, что нарушает порядок, который мы хотели сохранить.

В качестве примера, если у нас есть 2 файлы, созданные, первый файл будет выглядеть примерно так:

sku_0,sku_1,0.023 
sku_0,sku_3,0.328 
sku_1,sku_2,0.0848 

И второй файл:

sku_0,sku_2,0.482 
sku_1,sku_0,0.328 
sku_1,sku_3,0.736 

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

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

Есть ли способ, который мы могли бы использовать для принудительного сохранения порядка в этих файлах GCS? Или есть какое-то обходное решение?

Спасибо заранее,

ответ

1

Насколько я знаю, нет флага для поддержания порядка.

В качестве обходного пути вы можете переосмыслить свой вывод данных для использования типа NESTED и убедиться, что то, что вы хотите сгруппировать, преобразуется в строки NESTED, и вы можете экспортировать его в JSON.

+0

Мы просто перешли на стандартный sql, и это сработало. Большое спасибо! –

0

есть ли обходной путь?

В качестве опции вы можете переместить логику обработки с Python на BigQuery, тем самым исключая перемещение данных из BigQuery в GCS.