我有一个用例,我需要将 ttl 列添加到现有表中。目前,该表有超过 20 亿条记录。
是否有任何现有的解决方案围绕相同的构建?或者应该是 emr 是前进的道路?
我有一个用例,我需要将 ttl 列添加到现有表中。目前,该表有超过 20 亿条记录。
是否有任何现有的解决方案围绕相同的构建?或者应该是 emr 是前进的道路?
DynamoDB 不支持跨越主键边界的更新操作。对于读取数据,唯一跨越分区边界的操作是扫描。
因此,不幸的是,为表中的所有项目添加属性(DynamoDB 是文档数据库,因此没有列这样的概念)的唯一方法是实际为每个项目执行 Put。
如果您的表中有大约 20 亿个项目,那将是 20 亿次写入。
当然,您可以使用 EMR 和 Hive 连接到表并执行 SQL 样式更新以添加 TTL 属性,但它仍将转换为 20 亿个单独的 PutItem 请求,因此运行需要一段时间或非常昂贵.
如果您想添加 TTL 的原因是因为您正试图删除表中的大量项目,那么更好的方法可能是创建一个新表,使用 TTl 复制您需要的记录以及所有,然后删除旧表。
它不受直接支持,但您很幸运,最近发布的这篇 AWS 博客文章深入介绍了该过程。