无法从命令行删除实体

时间:2018-12-13 23:42:48

标签: google-cloud-platform google-cloud-datastore

我正在尝试使用prod导出的数据在非prod env上运行导入,但是不知道如何在开始导入之前从命令行删除所有孩子。由于我们正在创建用于负载测试的虚假数据,因此必须删除所有种类并执行全新导入。我可以从数据存储区管理员中手动删除种类,但希望通过编程方式进行删除。

1 个答案:

答案 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);
    }

}