2016-10-07 1 views
0

私はハッシュキーのみを持つテーブルを持っていますが、今度は、useDateをrangeキーとしてGSIを作成する必要があります。dynamodbテーブルの以前のアイテムの新しい属性のデフォルト値を設定するにはどうすればよいですか?

私はこれを、すべての新しい項目の数値としてcreationDate値を指定することで実現しています。

テーブルにはすでに5000エントリがあり、creationDateに値が設定されていないため、これらのエントリはGSIのスキャンまたはクエリ操作の結果に含まれません。 これに対する解決策として、現在のところcreationDateの値を持たないすべてのエントリにデフォルト値を使用したいとします。 Javaでdynamodbmapperを使用してこれを行う方法、またはAWSコンソールを使用して行う方法がありますか?

答えて

1

既存のアイテムは個別に更新する必要があります。新しい 属性があるとき

  • DynamoDBのAPIは
  • DynamoDBのは、いくつかのデフォルト値に機能を持っていないUpdateItemSpecまたはDynamoDBMapperを使用してハッシュキー 値のいずれかなしにアイテムを更新することはできません。アップデート項目は、属性DOE場合

UpdateTableSpecクラスを使用して表に追加しました -

属性がすでに存在する場合、次の例は何も行いません。 それ以外の場合は、属性をデフォルト値に設定します。

UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("orderId", "75246c41-02c7-48c4-8d4c-d202483e6d2b") 
      .withReturnValues(ReturnValue.ALL_NEW).withUpdateExpression("set #createDate = if_not_exists (#createDate, :val1)") 
      .withNameMap(new NameMap().with("#createDate", "createDate")) 
      .withValueMap(new ValueMap().withNumber(":val1", 1)); 

    UpdateItemOutcome outcome = table.updateItem(updateItemSpec); 
+0

同様の行でテーブルを更新する方法はありますか?たとえば、主キーとソートキーの複合キーを持つテーブルがあります。だから本質的に私のテーブルに2つの属性がありますが、私はテーブルに項目を追加せずに私のテーブルに3番目の属性を追加したいと思います。 – user2582651

関連する問題