在大查询表中加载entires的顺序

时间:2018-04-17 01:10:14

标签: google-bigquery jobs

我有一些示例数据,我已经加载到Google大查询中。我一直在以ndjson格式导入数据。如果我将数据全部加载到一个文件中,我看到它们在表格的预览标签中以不同的顺序显示,而不是我一次按顺序导入一个ndjson行。

顺序导入时,我等到看到以下输出:

Waiting on bqjob_XXXX ... (2s) Current status: RUNNING
Waiting on bqjob_XXXX ... (2s) Current status: DONE 

行显示的顺序似乎与我追加它们的顺序相匹配,因为导入它们的作业似乎在我继续下一步之前完成。但是当将它们全部加载到一个文件中时,它们的显示顺序与我的数据文件中的顺序不同。

那么为什么批量加载时数据条目会以不同的顺序显示?排队的数据条目如何加载,以及它们如何编入索引?

1 个答案:

答案 0 :(得分:3)

BigQuery没有索引的概念。 BigQuery表中的数据没有您可以依赖的特定顺序。如果您需要从BigQuery中获取有序数据,则需要在查询中使用显式ORDER BY - 这对于大型结果而言并不值得推荐,因为它会增加资源成本并最终导致资源超出错误。

BigQuery内部存储可以在内部“洗牌”您的数据行,以获得最佳/最佳的查询性能。再说一遍 - 在BigQuery表中没有像数据的物理顺序那样的东西

文档中的官方语言与this类似 - 无法保证压缩或未压缩文件的行顺序。