在不删除的情况下截断 Google 扳手 table 并重新创建 table
Truncating the Google spanner table without delete and recreating the table
我们正在使用 Spanner 数据库暂存大型数据集,我们希望按计划截断 table。 table 随时拥有超过 25+ 百万行。我们想截断 table 而不是删除并重新创建它。 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 数据流作业,该作业可以使用 SpannerIO 从您的 table 中读取,然后使用 SpannerIO.write 进行突变删除,或者可以是自定义 PTransform (使用 mutatons.delete)根据您的要求删除。
1) 解决方法是在主键上使用 WHERE 子句针对不同的键范围同时发出多个分区 DML 删除。这样可以加快删除速度。
2) "gcloud spanner databases execute-sql db-name" 命令也有一个超时选项。尝试将其增加到更高的值。
从下面的link来看,默认超时时间好像是10分钟。所以增加这个会有点帮助。
我们正在使用 Spanner 数据库暂存大型数据集,我们希望按计划截断 table。 table 随时拥有超过 25+ 百万行。我们想截断 table 而不是删除并重新创建它。 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 数据流作业,该作业可以使用 SpannerIO 从您的 table 中读取,然后使用 SpannerIO.write 进行突变删除,或者可以是自定义 PTransform (使用 mutatons.delete)根据您的要求删除。
1) 解决方法是在主键上使用 WHERE 子句针对不同的键范围同时发出多个分区 DML 删除。这样可以加快删除速度。
2) "gcloud spanner databases execute-sql db-name" 命令也有一个超时选项。尝试将其增加到更高的值。 从下面的link来看,默认超时时间好像是10分钟。所以增加这个会有点帮助。