我有一些示例数据,我已经加载到Google大查询中。我一直在以ndjson格式导入数据。如果我将数据全部加载到一个文件中,我看到它们在表格的预览标签中以不同的顺序显示,而不是我一次按顺序导入一个ndjson行。
顺序导入时,我等到看到以下输出:
Waiting on bqjob_XXXX ... (2s) Current status: RUNNING
Waiting on bqjob_XXXX ... (2s) Current status: DONE
行显示的顺序似乎与我追加它们的顺序相匹配,因为导入它们的作业似乎在我继续下一步之前完成。但是当将它们全部加载到一个文件中时,它们的显示顺序与我的数据文件中的顺序不同。
那么为什么批量加载时数据条目会以不同的顺序显示?排队的数据条目如何加载,以及它们如何编入索引?
答案 0 :(得分:3)
BigQuery没有索引的概念。 BigQuery表中的数据没有您可以依赖的特定顺序。如果您需要从BigQuery中获取有序数据,则需要在查询中使用显式ORDER BY - 这对于大型结果而言并不值得推荐,因为它会增加资源成本并最终导致资源超出错误。
BigQuery内部存储可以在内部“洗牌”您的数据行,以获得最佳/最佳的查询性能。再说一遍 - 在BigQuery表中没有像数据的物理顺序那样的东西
文档中的官方语言与this类似 - 无法保证压缩或未压缩文件的行顺序。