我们正在使用Spanner db来暂存大型数据集,我们想在计划的基础上截断表。我们想在不放弃和重新创建的情况下截断表。在GCP中,有什么办法可以做到这一点。
目前,我们手动运行Gcloud命令与--enable-partitioned-dml选项,这是删除< 1M行后计时。请提出更好的方法。
gcloud spanner databases execute-sql db-name --sql="delete from tableName where SpannerCommitTS
Cloud Spanner 中仍然不支持截断功能。您可以尝试使用 KeyRange 或 KeySet(根据您的数据)的 Mutation.delete 方法来避免 20k 突变限制。
为了避免手动工作,你可以编写一个Google Dataflow作业,它可以使用SpannerIO从你的表中读取,然后使用SpannerIO.write进行突变删除,或者可能是一个自定义PTransform(使用mutatons.delete)来根据你的要求进行删除。
1) 解决这个问题的方法是使用WHERE子句在主键上同时发布多个不同键范围的Partitioned DML删除。这将加快删除速度。
2)"gcloud spanner databases execute-sql db-name "命令也有一个超时选项。试着把它增加到一个更高的值。联系貌似默认的超时是10分钟。所以增加这个时间会有一点帮助。