java - 在运行时更改 GSI 投影类型

标签 java amazon-web-services amazon-dynamodb

我正在基于LSI的dynamo DB上进行查询表达式,并且LSI的投影类型设置为INCLUDE。如何在运行时将 LSI 投影更改为 INCLUDE ALL?。我看到projectionExpression 可以更改,但是否可行。如果是,请告诉我

Projection projection = new Projection().withProjectionType(ProjectionType.ALL);

queryExpression.setProjectionExpression()

最佳答案

你不能这样做。您的投影属性会在写入时复制到 LSI 中,因此尝试在运行时读取其他投影值会要求获取不存在的数据。

dynamo 中的索引只是针对另一个键插入的数据的副本。 Dynamo 在幕后管理这种重复并使您的索引和主表保持同步。

您需要使用可投影 ALL 的 LSI 重新创建表。我相信您使用的投影 API 适用于投影所有内容但可能希望返回所有内容的子集。

A projection is the set of attributes that is copied from a table into a secondary index. The partition key and sort key of the table are always projected into the index; you can project other attributes to support your application's query requirements. When you query an index, Amazon DynamoDB can access any attribute in the projection as if those attributes were in a table of their own.

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html

关于java - 在运行时更改 GSI 投影类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618672/

相关文章:

database - 在 DynamoDB 中存储时间序列数据

java - 如何在 dynamodb getItem 中应用过滤器

java - 使用路标发送由 OAuth 验证的 POST 请求时出错

amazon-web-services - 错误 : Expected params. 项目 ['id' ].N 为字符串

javascript - 如何使用预签名的 url 将对象放入 amazon s3?

amazon-web-services - IN PartiQL 运算符是否查询或扫描 DynamoDB 表?

java - 在Hadoop上实现Apriori算法

java - 如何根据Gson中的key直接获取json中的值

java - 使用 Java 运行 image magic 的转换命令会出现无法加载模块错误

mysql - 无法通过 HaProxy 连接到 RDS