Google cloud dataflow google dataflow write to Spaner创建了数百名工作人员将79G文件写入表中

Google cloud dataflow google dataflow write to Spaner创建了数百名工作人员将79G文件写入表中,google-cloud-dataflow,google-cloud-spanner,Google Cloud Dataflow,Google Cloud Spanner,我正试图用谷歌扳手将一个79G文件写入一个表中。该表有1个字符串键列、13个字符串列和4个字符串数组列。我正在为我创建的表使用修改后的示例。抛出了一个io.grpc.StatusRuntimeException:INVALID_参数:事务包含太多的突变。在79G文件上(使用一个小的示例文件效果很好)。没有从数据流作业写入数据库 为了解决这个问题,我按照建议将写入的批大小设置为1KB,方法是:span.write().withBatchSizeBytes(1024) 这导致数据流工作自动缩放到30

我正试图用谷歌扳手将一个79G文件写入一个表中。该表有1个字符串键列、13个字符串列和4个字符串数组列。我正在为我创建的表使用修改后的示例。抛出了一个
io.grpc.StatusRuntimeException:INVALID_参数:事务包含太多的突变。
在79G文件上(使用一个小的示例文件效果很好)。没有从数据流作业写入数据库

为了解决这个问题,我按照建议将写入的批大小设置为1KB,方法是:
span.write().withBatchSizeBytes(1024)

这导致数据流工作自动缩放到300人以上,而图表似乎表明这将需要超过18小时。对于这样大小的数据集,这是预期的行为吗?问题是否与批量大小有关?如果是这样的话,在保持较低的加载时间的同时,避免太多突变的例外情况的建议大小是多少

此问题将通过修复。当前限制为20k个变异列值(包括索引),如果您知道记录的大小,则可以估计近似的批大小。我建议您也限制使用该系统的工人的最大数量


如果有很多空值,可以做的一件事是跳过突变生成器中的空字段,这样它们就不会被计算为突变。我认为在这种情况下,您可以安全地尝试批量大小为10-100K的产品

这将通过以下方式解决。当前限制为20k个变异列值(包括索引),如果您知道记录的大小,则可以估计近似的批大小。我建议您也限制使用--maxNumWorkers标志的工人的最大数量。不幸的是,由于数组长度和稀疏数据,记录大小变化很大。但我将尝试修复maxNumWorkers标志。谢谢如果有很多空值,可以做的一件事是跳过突变生成器中的空字段,这样它们就不会被计算为突变。在这种情况下,我认为您可以安全地尝试10-100K的批处理大小。跳过变异中的空字段帮助很大,这次加载没有任何异常(并且没有批处理大小限制)。谢谢您的帮助。@MairbekKhadikov将您的评论作为答案发布,以便帖子所有者可以接受,并删除社区wiki答案。