如何在 DynamoDB Java SDK 中确定索引数据类型
How to determine index data type in DynamoDB Java SDK
我一直在尝试弄清楚如何确定 Amazon DynamoDB 的索引和全局二级索引的数据类型(在我的例子中是字符串或数字)table。
我正在使用 java SDK 与 DynamoDB 交互。我一直在使用 TableDescription class,它为我提供了很多信息,但似乎缺少确定数据类型的方法。
有谁知道获取索引数据类型的方法吗?
谢谢
你可以做一个 DescribeTable
call, and combine the data from the GlobalSecondaryIndexes[].KeySchema
with the data provided by the top level AttributeDefinitions
。这是可行的,因为 GSI 需要属性的定义,这意味着您可以从中访问类型。
这是一个使用 com.amazonaws.services.dynamodbv2.document.Table
作为 table 的示例,我为另一个 Whosebug 答案做了一个,您可以在其中访问 AttributeDefinition
:
final TableDescription description = table.describe();
System.out.println(description.getAttributeDefinitions());
final List<AttributeDefinition>
tableAttributeDefinitions =
description.getAttributeDefinitions();
for (GlobalSecondaryIndexDescription gsi : description
.getGlobalSecondaryIndexes()) {
System.out.println("IndexName: " + gsi.getIndexName());
for (KeySchemaElement keySchemaElement : gsi.getKeySchema()) {
final String attrName = keySchemaElement.getAttributeName();
final AttributeDefinition
attrDef =
tableAttributeDefinitions.stream()
.filter(ad -> ad.getAttributeName().equals(attrName)).findFirst()
.orElseThrow(RuntimeException::new);
System.out.println(
"AttributeName: " + attrDef.getAttributeName() +
", AttributeType: " + attrDef.getAttributeType());
}
}
输出:
[{AttributeName: hashAttributeName,AttributeType: S}, {AttributeName:
rangeAttributeName,AttributeType: N}, {AttributeName:
otherAttribute,AttributeType: N}] IndexName: myOtherAttributeGsi
AttributeName: otherAttribute, AttributeType: N
我一直在尝试弄清楚如何确定 Amazon DynamoDB 的索引和全局二级索引的数据类型(在我的例子中是字符串或数字)table。
我正在使用 java SDK 与 DynamoDB 交互。我一直在使用 TableDescription class,它为我提供了很多信息,但似乎缺少确定数据类型的方法。
有谁知道获取索引数据类型的方法吗?
谢谢
你可以做一个 DescribeTable
call, and combine the data from the GlobalSecondaryIndexes[].KeySchema
with the data provided by the top level AttributeDefinitions
。这是可行的,因为 GSI 需要属性的定义,这意味着您可以从中访问类型。
这是一个使用 com.amazonaws.services.dynamodbv2.document.Table
作为 table 的示例,我为另一个 Whosebug 答案做了一个,您可以在其中访问 AttributeDefinition
:
final TableDescription description = table.describe();
System.out.println(description.getAttributeDefinitions());
final List<AttributeDefinition>
tableAttributeDefinitions =
description.getAttributeDefinitions();
for (GlobalSecondaryIndexDescription gsi : description
.getGlobalSecondaryIndexes()) {
System.out.println("IndexName: " + gsi.getIndexName());
for (KeySchemaElement keySchemaElement : gsi.getKeySchema()) {
final String attrName = keySchemaElement.getAttributeName();
final AttributeDefinition
attrDef =
tableAttributeDefinitions.stream()
.filter(ad -> ad.getAttributeName().equals(attrName)).findFirst()
.orElseThrow(RuntimeException::new);
System.out.println(
"AttributeName: " + attrDef.getAttributeName() +
", AttributeType: " + attrDef.getAttributeType());
}
}
输出:
[{AttributeName: hashAttributeName,AttributeType: S}, {AttributeName: rangeAttributeName,AttributeType: N}, {AttributeName: otherAttribute,AttributeType: N}] IndexName: myOtherAttributeGsi
AttributeName: otherAttribute, AttributeType: N