use of com.amazonaws.services.dynamodbv2.model.LocalSecondaryIndexDescription in project aws-sdk-android by aws-amplify.
the class Search method isKeyAttribute.
private static boolean isKeyAttribute(Table table, String indexName, String attributeName) {
GlobalSecondaryIndexDescription gsi = null;
final LocalSecondaryIndexDescription lsi;
if (StringUtils.isBlank(indexName)) {
return table.getKeys().containsKey(attributeName);
} else if (table.getGlobalSecondaryIndexes().get(indexName) != null) {
gsi = table.getGlobalSecondaryIndexes().get(indexName);
for (final KeySchemaElement element : gsi.getKeySchema()) {
return isKeyAttribute(element, attributeName);
}
} else if (table.getLocalSecondaryIndexes().get(indexName) != null) {
lsi = table.getLocalSecondaryIndexes().get(indexName);
for (final KeySchemaElement element : lsi.getKeySchema()) {
return isKeyAttribute(element, attributeName);
}
} else {
throw new IllegalStateException(String.format("Unable to locate index %s on table %s", indexName, table.getTableName()));
}
return false;
}
use of com.amazonaws.services.dynamodbv2.model.LocalSecondaryIndexDescription in project aws-sdk-android by aws-amplify.
the class Table method loadTableDescription.
/**
* Load table description.
*/
public void loadTableDescription() {
clear();
final DescribeTableRequest request = Table.appendDynamoDBDocumentUserAgentString(new DescribeTableRequest(this.tableName));
final DescribeTableResult result = client.describeTable(request);
this.tableDescription = result.getTable();
for (final KeySchemaElement element : this.tableDescription.getKeySchema()) {
final String keyName = element.getAttributeName();
for (final AttributeDefinition ad : this.tableDescription.getAttributeDefinitions()) {
if (ad.getAttributeName().equals(keyName)) {
final KeyDescription kd = new KeyDescription();
kd.setHash("HASH".equalsIgnoreCase(element.getKeyType()));
kd.setType(getType(ad.getAttributeType()));
if (kd.isHash()) {
this.hashKeys.add(keyName);
} else {
this.rangeKeys.add(keyName);
}
this.keys.put(keyName, kd);
break;
}
}
}
if (this.tableDescription.getLocalSecondaryIndexes() != null) {
for (final LocalSecondaryIndexDescription index : this.tableDescription.getLocalSecondaryIndexes()) {
this.localSecondaryIndexes.put(index.getIndexName(), index);
this.localSecondaryIndexNames.add(index.getIndexName());
}
}
if (this.tableDescription.getGlobalSecondaryIndexes() != null) {
for (final GlobalSecondaryIndexDescription index : this.tableDescription.getGlobalSecondaryIndexes()) {
this.globalSecondaryIndexes.put(index.getIndexName(), index);
this.globalSecondaryIndexNames.add(index.getIndexName());
}
}
for (final AttributeDefinition ad : this.tableDescription.getAttributeDefinitions()) {
this.attributes.add(ad);
}
}
use of com.amazonaws.services.dynamodbv2.model.LocalSecondaryIndexDescription in project aws-athena-query-federation by awslabs.
the class DDBTableUtils method getTable.
/**
* Fetches metadata for a DynamoDB table
*
* @param tableName the (case sensitive) table name
* @param invoker the ThrottlingInvoker to call DDB with
* @param ddbClient the DDB client to use
* @return the table metadata
*/
public static DynamoDBTable getTable(String tableName, ThrottlingInvoker invoker, AmazonDynamoDB ddbClient) throws TimeoutException {
DescribeTableRequest request = new DescribeTableRequest().withTableName(tableName);
TableDescription table = invoker.invoke(() -> ddbClient.describeTable(request).getTable());
KeyNames keys = getKeys(table.getKeySchema());
// get data statistics
long approxTableSizeInBytes = table.getTableSizeBytes();
long approxItemCount = table.getItemCount();
final long provisionedReadCapacity = table.getProvisionedThroughput() != null ? table.getProvisionedThroughput().getReadCapacityUnits() : PSUEDO_CAPACITY_FOR_ON_DEMAND;
// get secondary indexes
List<LocalSecondaryIndexDescription> localSecondaryIndexes = table.getLocalSecondaryIndexes() != null ? table.getLocalSecondaryIndexes() : ImmutableList.of();
List<GlobalSecondaryIndexDescription> globalSecondaryIndexes = table.getGlobalSecondaryIndexes() != null ? table.getGlobalSecondaryIndexes() : ImmutableList.of();
ImmutableList.Builder<DynamoDBIndex> indices = ImmutableList.builder();
localSecondaryIndexes.forEach(i -> {
KeyNames indexKeys = getKeys(i.getKeySchema());
// DynamoDB automatically fetches all attributes from the table for local secondary index, so ignore projected attributes
indices.add(new DynamoDBIndex(i.getIndexName(), indexKeys.getHashKey(), indexKeys.getRangeKey(), ProjectionType.ALL, ImmutableList.of()));
});
globalSecondaryIndexes.stream().filter(i -> IndexStatus.fromValue(i.getIndexStatus()).equals(IndexStatus.ACTIVE)).forEach(i -> {
KeyNames indexKeys = getKeys(i.getKeySchema());
indices.add(new DynamoDBIndex(i.getIndexName(), indexKeys.getHashKey(), indexKeys.getRangeKey(), ProjectionType.fromValue(i.getProjection().getProjectionType()), i.getProjection().getNonKeyAttributes() == null ? ImmutableList.of() : i.getProjection().getNonKeyAttributes()));
});
return new DynamoDBTable(tableName, keys.getHashKey(), keys.getRangeKey(), table.getAttributeDefinitions(), indices.build(), approxTableSizeInBytes, approxItemCount, provisionedReadCapacity);
}
Aggregations