如何在 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