Как экспортировать данные Firestore в Google Cloud Storage? - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу автоматически экспортировать данные Firestore в Google Cloud Storage по регулярному расписанию (чтобы я мог затем импортировать их в BigQuery для анализа).

Расписание экспорта данных действительно описываетспособ экспортировать данные из Firestore по расписанию, но это JavaScript для запуска на Node.js: я хочу избежать того, что & предпочитает придерживаться полностью Java-решения на стороне сервера.

Экспорт и импорт данных предлагает другой способ - использование утилиты командной строки gcloud - экспортировать данные Firestore в GCS.Однако я не хочу планировать запуск сценария на моем ноутбуке, а затем должен убедиться, что мой ноутбук включен в нужное время и имеет активное подключение к Интернету.Я ищу решение, полностью основанное на App Engine (Standard), которое можно запустить как задание cron.

На момент написания статьи, похоже, не существует программного способа сделать это, используяFirebase Admin SDK (версия 6.6.0) для Java.

1 Ответ

0 голосов
/ 07 декабря 2018

Ответ заключается в прямом использовании Firestore REST API .

. В приведенном ниже коде я использовал клиентскую библиотеку Google HTTP для Java (которая должна бытьваш выбор по умолчанию в App Engine (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 Operation для экспорта указанной коллекции в GCS.Затем вы можете получить статус операции , если вы хотите что-то сделать после ее завершения (или просто отправить / подготовить отчет).

Убедитесь, чтоиспользуемая учетная запись службы имеет необходимые разрешения (описано в Расписание экспорта данных ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...