繁体   English   中英

如何将Firestore数据导出到Google Cloud Storage?

[英]How do I export Firestore data to Google Cloud Storage?

我想定期将Firestore数据自动导出到Google Cloud Storage(以便随后将其导入BigQuery进行分析)。

计划数据导出确实概述了按计划从Firestore导出数据的方法,但这是在Node.js上运行的JavaScript:我想避免这种情况,并且宁愿坚持使用服务器端的全Java解决方案

导出和导入数据提供了另一种方式-使用gcloud命令行实用程序-将Firestore数据导出到GCS。 但是,我不想安排脚本在笔记本电脑上运行,然后必须确保笔记本电脑在正确的时间打开具有有效的Internet连接。 我正在寻找一个完全基于App Engine(标准)的解决方案,可以作为cron作业运行。

在撰写本文时,似乎还没有使用Java的Firebase Admin SDK(版本6.6.0)进行编程的方式。

答案在于直接利用Firestore REST API

在下面的代码中,我使用了Google的Java HTTP客户端库 (无论如何,它应该是App Engine(标准)上的默认选择)进行必要的网络调用。

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。 如果您想在操作完成时做点什么(或者只是发送/准备报告),则可以获取操作的状态

确保您使用的服务帐户具有必需的权限(如“ 计划数据导出”中所述 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM