当前位置: 首页 > 知识库问答 >
问题:

使用GSI和range键查询DynamoDB

龙永思
2023-03-14

我有一个带有哈希键(id)的表(配置文件),我有一个关于名称的GSI,一个关于国家的范围键。我想创建一个DAO方法,它将获取所有具有给定值的name和country的记录,如下所示:List getProfileWithNameAndCountry(name,country);

Profile profile = new Profile();
profile.setCountry("name");
DynamoDBQueryExpression<Profile> queryExpression = new DynamoDBQueryExpression<Profile>()
                            .withIndexName("name-index")
                            .withHashKeyValues(profile)
                            .withConsistentRead(false);
Profile profile = new Profile();
profile.setCountry("name");
Condition countryCondition = new Condition()
                    .withComparisonOperator(ComparisonOperator.EQ.toString())
                    .withAttributeValueList(new AttributeValue().withS(country));
DynamoDBQueryExpression<Profile> queryExpression = new DynamoDBQueryExpression<Profile>()
                            .withIndexName("name-index")
                            .withHashKeyValues(profile)
                            .withRangeKeyCondition("country", countryCondition)
                            .withConsistentRead(false);

共有1个答案

秦俊豪
2023-03-14

您不能将GSI中的哈希键与表的范围键组合在一起。

您需要同时使用哈希和范围键创建GSI。

 类似资料:
  • 在我的DynamoDB表中,有HashKey=ID和GSI=Type。我需要获取特定类型(GSI)的所有hashKeys(ID)。 在这种情况下,获取给定类型的所有ID的有效方法是什么?我的DynamoDB表不会很大。

  • 我有一个名为“弗兰克”的DynamoDB表,只有一个GSI。分区键称为PK,排序键称为SK,GSI分区键称为GSI1_PKGSI排序键称为GSI1_SK。我有一个存储实际数据的“数据”映射。 GSI分区键和排序键直接映射到表中具有相同名称的属性。 我可以运行partiql查询来获取图像中显示的结果。以下是PartIQ代码: 注意分区代码是如何多次引用“GSI1_SK”的。分区查询有效,并返回图像中

  • 我一直在阅读关于使用GSI的最佳方式的问题,这一个DynamoDB:在查询中使用全球二级索引接近我所需要的,但我仍然有几个问题。 我需要进行以下三类查询: 根据我的理解,创建一个基于product_name的GSI将服务于所有三个目的。我想了解的是,在排序键中再添加2个带有launch_year和manufacture的GSI会加快查询2和3的速度吗?sort key的唯一目的是返回已排序的数据,

  • 我在Cassandra中有一个表,定义为 我在这张表中插入了数十亿条记录。现在我想用CQL查询表 null 谢谢!

  • 我有一个表,其中有一个二级索引。我的二级索引使用DynamoDB编组。 如何查询此GSI上的表?addRangeKeyCondition仅支持withS和withN方法。如何使用我的对象查询它?如果范围键是字符串,我会这样查询: 但我不能这样做,因为我的范围键使用封送拆收器。如何使用此范围键查询我的GSI?

  • 当我在GSI上查询时,我对Amazon DynamoDBv2的Amazon DynamoDBAsync.query异步请求的实现返回代码400“查询条件错过了关键模式元素......”。 我尝试使用DynamoDBAttribute名称(“myAttr”)和GSI的实际索引名称(“idx\u global\u myAttr”),并收到相同的错误代码。这与Docker的图片“amazon/dynam