2016-04-23 12 views
9

現在、Java DynamoMapperを使用してテーブルを作成およびクエリしています。グローバルセカンダリインデックスを持つテーブルを作成しようとすると、私は次のエラーを取得するDynamoMapperとクラスAnnotationを使用して、グローバルセカンダリインデックスを持つテーブルを作成します。

No provisioned throughput specified for the global secondary index

テーブルを表す私のJavaクラスは、グローバルセカンダリインデックスのために、この属性を持っています。

@DynamoDBIndexHashKey(globalSecondaryIndexName="sender") 
    public String getSender() { 
    return sender; 
} 
は、テーブルを作成する

クラスこの

public boolean createTable() { 
try { 
DynamoDBMapper mapper = new DynamoDBMapper(client); 
CreateTableRequest tableRequest =  mapper.generateCreateTableRequest(entityClass); // 1 
tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1000L, 1500L)); // 2 
client.createTable(tableRequest); // 3 

    } catch (Error e) { 
     e.printStackTrace(); 
     return false; 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

のように見える 私は、追加の注釈とコンフィギュレーションのためのアマゾンのサイトを検索しましたが、何もDynamoMapperのために来ていません。 ORMを使用してこれを行うには、とにかく、または私は低レベルのAPIを使用して手動で作成する必要がありますか?

答えて

9

生成される各セカンダリインデックステーブルにも、プロビジョニングされたスループットを設定する必要があります。

tableRequest.getGlobalSecondaryIndexes().get(0).setProvisionedThroughput(new ProvisionedThroughput(10l, 10l)); 
+0

ありがとうございました! –

1

@ Jeremyの回答への拡張。

複数のGSIがある場合は、以下のようにすることができます。同じ値のProvisionedThroughputオブジェクトを常に作成する必要はありません。

final ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput(5L, 5L); 
createRequest.setProvisionedThroughput(provisionedThroughput); 
createRequest.getGlobalSecondaryIndexes().forEach(v -> v.setProvisionedThroughput(provisionedThroughput)); 
関連する問題