0

既存のエンティティにプロパティを追加する場合は、単に「複製」して追加します。Google Cloud Dataflowを使用してDatastoreのプロパティを削除または更新する

Entity oldEntity = c.element(); 
    Entity.Builder entityBuilder = Entity.newBuilder(oldEntity); 
    entityBuilder.addProperty(
      DatastoreHelper.makeProperty("newProperty", 
        DatastoreHelper.makeValue("Value") 
     ) 
); 
    c.output(entityBuilder.build()); 

プロパティを更新する場合は、もう一度追加すると古い値を上書きしても機能しません。プロパティの名前は一意でなければならないため、データストアには保存されません。同じ名前の2つの名前を持つことになります。

Error writing to the Datastore (400): Entity has duplicate property name 

あなたがプロパティを削除したい場合は、プロパティリストからインデックスを知る必要があり、そのためにあなたは、すべてのプロパティを一覧表示する更新するプロパティが存在するかどうかをチェック、維持する必要があるだろうインデックス番号のトラックを削除してから削除します。

この手順の組み込みヘルパーがありますか、ショートカットがありませんか?

答えて

0

現在、Google Cloud DataflowのJava SDKはDatastore API v1beta2を使用しています。DatastoreHelper.getPropertyMapを使用せず、結果としてMap<String, Value>にプロパティを追加してもプロパティをエンティティに直接追加することはできません。

v1beta3に切り替えると、プロパティはチームのメンバーにマップaccordingとして公開されます。

だから、これは私がv1beta2でそれを管理する方法である:特性の一つが埋め込まれたエンティティの場合に

Entity oldEntity = c.element(); 

// We need to get the property map, but the one from DatastoreHelper is an unmodifiableMap 
Map<String, Value> oldEntity_map = DatastoreHelper.getPropertyMap(oldEntity); 
Map<String, Value> newEntity_map = new HashMap<String, Value>(); 
newEntity_map.putAll(oldEntity_map); 

// Adding or updating a property 
newEntity_map.put("newProperty", DatastoreHelper.makeValue("Value").build()); 
// Deleting a property 
newEntity_map.remove("delete-this"); 

Entity.Builder updatedEntity = Entity.newBuilder(oldEntity); 
updatedEntity.clear(); 
updatedEntity.setKey(oldEntity.getKey()); 

for (Map.Entry<String, Value> property : newEntity_map.entrySet()) 
{ 
    updatedEntity.addProperty(
     DatastoreHelper.makeProperty(property.getKey(), property.getValue())); 
} 

c.output(updatedEntity.build()); 
+0

は、この仕事をしていますか? –

+0

はい!あなたはそれを更新しようとしているのですか?この質問/回答コンボをチェックして、役立つかどうかを確認してください。http://stackoverflow.com/q/34774351/190908 –

+0

ユースケースはあなたのものと同じです。私はエンティティにプロパティを追加したり更新したりする必要があります。提案したアプローチの問題は、古いエンティティと新しいエンティティの順序やプロパティが変化していることです。これは必要なものではありません。 –