如何将firestore数据导出到google云存储?

kognpnkq  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(481)

我想定期将firestore数据自动导出到google云存储(这样我就可以将其导入bigquery进行分析)。
schedule data exports确实概述了一种按计划从firestore导出数据的方法,但是它是在node.js上运行的javascript:我想避免这种情况&我更喜欢在服务器端使用全java解决方案。
导出和导入数据提供了另一种方法—使用 gcloud 命令行实用程序-将firestore数据导出到gcs。但是,我不想将脚本安排在我的笔记本电脑上运行&然后必须确保我的笔记本电脑在正确的时间打开并且具有活动的internet连接。我正在寻找一个完全基于应用程序引擎(标准)的解决方案,可以作为一个应用程序运行 cron 工作。
在撰写本文时,似乎还没有一种使用firebase admin sdk(版本6.6.0)for java进行编程的方法。

2guxujil

2guxujil1#

答案在于直接使用firestorestapi。
在下面的代码中,我使用了google的httpclientlibrary for java(这应该是appengine(standard)上的默认选择)来进行必要的网络调用。

public static final String DEF_GCS_BUCKET_NAME = PROJECT_ID + ".appspot.com";

public static final String FIRESTORE_API_V1BETA2 =
        "https://firestore.googleapis.com/v1beta2";

public static final String FIRESTORE_DB = "/projects/" + PROJECT_ID
        + "/databases/(default)";

public static final String FIRESTORE_EXPORT_GCS_LOC = "gs://"
        + DEF_GCS_BUCKET_NAME + "/firestore-export/";

public static final String FIRESTORE_EXPORT_GCS_ROOT = "firestore-export/";

private static final String FUNC_EXPORT_DOCUMENTS = ":exportDocuments";

@javax.annotation.CheckForNull
public static Operation exportCollectionToGcs(@lombok.NonNull String collection)
        throws IOException {

    AccessToken token = tokenFor(serviceAc());
    Map<String, Object> payload = new HashMap<>();
    payload.put("collectionIds", Arrays.asList(collection));
    payload.put("outputUriPrefix", FIRESTORE_EXPORT_GCS_LOC + collection);

    GenericUrl url = new GenericUrl(FIRESTORE_API_V1BETA2 + FIRESTORE_DATABASE
        + FUNC_EXPORT_DOCUMENTS);
    HttpContent content = new JsonHttpContent(jacksonFactory(), payload);
    HttpRequest req = requestFactory().buildPostRequest(url, content);
    req.getHeaders().setAuthorization("Bearer " + token.getTokenValue())
    Operation op = null;
    try {
        HttpResponse res = req.execute();
        // Parse the response JSON to populate an Operation POJO
    } catch (HttpResponseException e) {
        // Handle the error
    }
    return op;
}

这将启动firestore操作以将指定集合导出到gcs。如果您想在操作完成时执行某项操作(或只是发送/准备报告),则可以获取该操作的状态。
确保您使用的服务帐户具有必需的权限(如计划数据导出中所述)。

相关问题