如何在压缩文件中保留Google云端存储行顺序

时间:2016-11-22 15:23:18

标签: google-bigquery google-cloud-storage

我们在BigQuery中创建了一个返回SKU和它们之间相关性的查询。类似的东西:

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云端存储,从而产生多个压缩文件。

这些文件已下载,我们有一个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文件中的订单吗?或者有一些解决方法吗?

提前致谢,

2 个答案:

答案 0 :(得分:1)

据我所知,没有标志可以保持秩序。

作为一种变通方法,您可以重新考虑数据输出以使用NESTED类型,并确保将要组合在一起的内容转换为NESTED行,并且可以导出为JSON。< / p>

答案 1 :(得分:0)

  

有一些解决方法吗?

作为一个选项 - 您可以将处理逻辑从Python移动到BigQuery,从而消除将数据从BigQuery移动到GCS。