簡體   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