我正在尝试使用prod导出的数据在非prod env上运行导入,但是不知道如何在开始导入之前从命令行删除所有孩子。由于我们正在创建用于负载测试的虚假数据,因此必须删除所有种类并执行全新导入。我可以从数据存储区管理员中手动删除种类,但希望通过编程方式进行删除。
答案 0 :(得分:0)
我希望以下代码对您有所帮助。您可以按照以下方法从一种问题中删除所有实体。首先,我们从种类中获取所有实体并填充键列表,然后使用键选择每个实体并将其从数据存储区中删除。
第1步:从数据存储区中获取所有密钥
List<String> googleDSKeyList = new ArrayList<String>();
StructuredQuery<Entity> query = Query.newEntityQueryBuilder().setKind(kind).build();
QueryResults<Entity> results = datastore.run(query);
results.forEachRemaining(entity -> googleDSKeyList.add(String.valueOf(entity.getKey().getNameOrId())));
第2步:对于每个实体,将密钥传递给delete方法。
googleDSKeyList.forEach(keyId-> deleteEntity(keyId));
第3步:要删除实体,请执行选择,然后删除。
public void deleteEntity(String KEY_VALUE) {
Query<Entity> query = Query
.newGqlQueryBuilder(Query.ResultType.ENTITY,
"SELECT * WHERE __key__ HAS ANCESTOR KEY (" + KIND_NAME + ", '" + PRIMARY_KEY + "')")
.setAllowLiteral(true).build();
QueryResults<Entity> results = datastore.run(query);
if (results.hasNext()) {
Entity rs = results.next();
datastore.delete(rs.getKey());
LOGGER.info("Successfully Deleted KEY # : " + KEY_VALUE);
}
}