【发布时间】:2022-06-22 13:26:38
【问题描述】:
如标题所述,使用存储读取 API 构建的读取流读取的数据是否有任何排序顺序?关于分区和集群键是否有任何排序,据我了解,分区是共置的,如果使用集群,则分区中的数据存储在集群块中?
【问题讨论】:
标签: api google-bigquery storage
如标题所述,使用存储读取 API 构建的读取流读取的数据是否有任何排序顺序?关于分区和集群键是否有任何排序,据我了解,分区是共置的,如果使用集群,则分区中的数据存储在集群块中?
【问题讨论】:
标签: api google-bigquery storage
Storage API 在storage directly 上运行。因此,您确实无法假设使用 Storage Read API 接收数据的顺序。
在聚簇表中,只要将新数据添加到表或特定分区,数据就会自动组织起来。来自partitioned table doc 和clustered table doc
分区表:分区表是一种特殊的表,它分为多个段,称为分区,可以更轻松地管理和查询您的数据。
集群表:当您在 BigQuery 中创建集群表时,表数据会根据表架构中一个或多个列的内容自动组织。您指定的列用于搭配相关数据。将数据写入聚簇表时,BigQuery 会使用聚簇列中的值对数据进行排序。
这些值用于将数据组织到 BigQuery 存储中的多个块中。聚集列的顺序决定了数据的排序顺序。当新数据添加到表或特定分区时,BigQuery 会在后台执行自动重新集群以恢复表或分区的排序属性。
当您将 cluster by 与某些列一起使用时,它会应用于整个数据集。如果表是partitioned table,那么它将应用于每个分区。
您可以关注此code lab 以获得更好的理解。来自实验室:-
以stackoverflow.question_2018 表为例。假设它有 3 列
如果我们从具有creation_date 作为日期分区的主表创建一个新的分区表,那么根据分区逻辑,它将在每个创建日期都有一个分区。
现在,如果我们创建一个表 creation_date 作为分区并在列 tags 上应用 cluster by,那么集群将应用于每个分区。即使我们在此表中添加新数据,bigquery 也会负责重新组织数据。
【讨论】: