如标题所述,使用Storage Read API构建的读取流读取的数据是否有排序?是否有关于分区和集群键的任何排序,据我所知,分区是并置的,如果使用集群,分区中的数据存储在集群块中?
Storage API 直接在 storage 上运行。因此,您真的不能假设使用 Storage Read API 接收数据的顺序。
在聚簇表中,只要将新数据添加到表或特定分区,数据就会自动组织。来自分区表文档和聚簇表文档
分区表: 分区表是一种特殊的表,它被分成多个段,称为分区,可以更轻松地管理和查询您的数据。
聚簇表: 当您在 BigQuery 中创建聚簇表时,表数据会根据表架构中一个或多个列的内容自动组织。您指定的列用于并置相关数据。将数据写入聚簇表时,BigQuery 会使用聚簇列中的值对数据进行排序。
这些值用于将数据组织到 BigQuery 存储中的多个块中。聚集列的顺序决定了数据的排序顺序。当新数据添加到表或特定分区时,BigQuery 会在后台执行自动重新聚类以恢复表或分区的排序属性。
当您将
cluster by
与某些列一起使用时,它会应用于整个数据集。如果表是 partitioned table
那么它将应用于每个分区。
您可以按照这个 code lab 来更好地理解。来自实验室:- 以这张
stackoverflow.question_2018
表为例。假设它有 3 列
如果我们从具有
creation_date
作为日期分区的主表创建一个新的分区表,那么根据分区逻辑,它将为每个创建日期创建一个分区。
现在,如果我们创建一个表
creation_date
作为分区并在列 cluster by
上应用 tags
,那么聚类将应用于每个分区。即使我们在此表中添加新数据,bigquery 也会负责重新组织数据。
Storage Read API 可以返回多个流中的数据。根据每个流中的数据如何组合在一起,最终结果可能会或可能不会保留原始顺序