Entitäten exportieren und importieren

Auf dieser Seite wird beschrieben, wie Sie Firestore-Entitäten im Datastore-Modus mit dem verwalteten Export- und Importdienst exportieren und importieren. Der verwaltete Export- und Importdienst ist über die Cloud Console, die Google Cloud-Befehlszeile und die Datastore Admin API (REST, RPC) verfügbar.

Mit dem verwalteten Export- und Importdienst können Sie Daten nach der versehentlichen Löschung von Daten wiederherstellen und Daten zur Offlineverarbeitung exportieren. Sie können alle Entitäten oder nur bestimmte Arten von Entitäten exportieren. Ebenso können Sie alle Daten aus einem Export oder nur bestimmte Arten importieren. Beachten Sie bei der Verwendung des verwalteten Export- und Importdienstes Folgendes:

  • Der Exportdienst verwendet Eventual Consistency-Lesevorgänge. Sie können nicht davon ausgehen, dass ein Export zu einem bestimmten Zeitpunkt stattfindet. Der Export kann Entitäten enthalten, die nach Beginn des Exports geschrieben wurden, und Entitäten ausschließen, die vor Beginn des Exports geschrieben wurden.

  • Ein Export enthält keine Indexe. Wenn Sie Daten importieren, werden die benötigten Indexe automatisch mit den aktuellen Indexdefinitionen Ihrer Datenbank neu erstellt. Einstellungen für Attributwerte pro Entität werden exportiert und während des Imports berücksichtigt.

  • Bei Importen werden Entitäten keine neuen IDs zugewiesen. Für Importe werden die IDs verwendet, die zum Zeitpunkt des Exports vorhanden waren. Vorhandene Entitäten mit derselben ID werden überschrieben. Während eines Imports werden die IDs für den Zeitraum reserviert, in dem die Entitäten importiert werden. Dieses Feature verhindert ID-Kollisionen mit neuen Entitäten, wenn Schreibvorgänge aktiviert sind, während ein Import ausgeführt wird.

  • Wenn eine Entität in Ihrer Datenbank nicht von einem Import betroffen ist, verbleibt sie nach dem Import in Ihrer Datenbank.

  • Daten, die aus einer Datenbank im Datastore-Modus exportiert werden, können in eine andere Datenbank im Datastore-Modus importiert werden, auch in eine andere Datenbank.

  • Der verwaltete Export- und Importdienst begrenzt die Anzahl gleichzeitiger Exporte und Importe auf 50 und ermöglicht maximal 20 Export- und Importanfragen pro Minute für ein Projekt. Für jede Anfrage beschränkt der Dienst die Anzahl der Entitätsfilterkombinationen auf 100.

  • Die Ausgabe eines verwalteten Exports verwendet das LevelDB-Logformat.

  • Wenn Sie nur einen Teil der Entitäten importieren oder Daten in BigQuery importieren möchten, müssen Sie im Export einen Entitätsfilter angeben.

Hinweise

Bevor Sie den verwalteten Export- und Importdienst verwenden können, müssen Sie die folgenden Schritte ausführen.

  1. Aktivieren Sie die Abrechnung für das Google Cloud-Projekt. Nur bei Google Cloud-Projekten mit aktivierter Abrechnung kann die Export- und Importfunktion genutzt werden.

  2. Erstellen Sie einen Cloud Storage-Bucket am selben Speicherort wie Ihre Firestore-Datenbank im Datastore-Modus. Ein Bucket mit der Funktion "Sender bezahlt" kann nicht für Export- und Importvorgänge verwendet werden.

  3. Weisen Sie Ihrem Nutzerkonto eine IAM-Rolle mit der Berechtigung datastore.databases.export zu, wenn Sie Daten exportieren, oder mit der Berechtigung datastore.databases.import, wenn Sie Daten importieren. Die Rolle Datastore Import Export Admin gewährt beispielsweise beide Berechtigungen.

  4. Wenn sich der Cloud Storage-Bucket in einem anderen Projekt befindet, gewähren Sie dem Standarddienstkonto Ihres Projekts Zugriff auf den Bucket.

gcloud für Ihr Projekt einrichten

Wenn Sie gcloud verwenden möchten, um Ihre Import- und Exportvorgänge zu starten, richten Sie gcloud ein und stellen Sie auf eine der folgenden Arten eine Verbindung zu Ihrem Projekt her:

Verwaltete Export- und Importvorgänge starten

In diesem Abschnitt wird beschrieben, wie Sie einen verwalteten Export- oder Importvorgang starten.

Alle Entitäten exportieren

Console

  1. Rufen Sie in der Google Cloud Console die Seite Datastore Import/Export auf.

    Zur Seite Import/Export“

  2. Klicken Sie auf Exportieren.

  3. Legen Sie das Feld Namespace auf All Namespaces und das Feld Kind auf All Kinds fest.

  4. Geben Sie unter Ziel den Namen Ihres Cloud Storage-Buckets ein.

  5. Klicken Sie auf Exportieren.

Die Konsole kehrt zur Seite Import/Export zurück. Eine Benachrichtigung meldet den Erfolg oder Misserfolg Ihrer verwalteten Exportanfrage.

gcloud

Verwenden Sie den Befehl gcloud datastore export, um alle Entitäten in Ihrer Datenbank zu exportieren.

 gcloud datastore export gs://bucket-name --async

Dabei ist bucket-name der Name Ihres Cloud Storage-Buckets und ein optionales Präfix, z. B. bucket-name/datastore-exports/export-name. Sie können nicht dasselbe Präfix für einen anderen Exportvorgang verwenden. Wenn Sie kein Dateipräfix angeben, erstellt der verwaltete Exportdienst ein Präfix anhand der aktuellen Uhrzeit.

Mit dem Flag --async verhindern Sie, dass gcloud auf den Abschluss des Vorgangs wartet. Wenn Sie das Flag --async weglassen, können Sie Ctrl+c eingeben, um auf den Vorgang zu warten. Dadurch wird der Vorgang nicht abgebrochen.

Ausruhen

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • project-id: Ihre Projekt-ID
  • bucket-name: der Name Ihres Cloud Storage-Buckets

HTTP-Methode und URL:

POST https://datastore.googleapis.com/v1/projects/project-id:export

JSON-Text anfordern:

{
  "outputUrlPrefix": "gs://bucket-name",
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "name": "projects/project-id/operations/operation-id",
  "metadata": {
    "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
    "common": {
      "startTime": "2019-09-18T18:42:26.591949Z",
      "operationType": "EXPORT_ENTITIES",
      "state": "PROCESSING"
    },
    "entityFilter": {},
    "outputUrlPrefix": "gs://bucket-name/2019-09-18T18:42:26_85726"
  }
}
Die Antwort ist ein Vorgang mit langer Ausführungszeit, den Sie auf Abschluss prüfen können.

Bestimmte Arten oder Namespaces exportieren

Wenn Sie eine bestimmte Teilmenge von Arten und/oder Namespaces exportieren möchten, geben Sie einen Entitätsfilter mit Werten für Arten und Namespace-IDs an. Jede Anfrage ist auf 100 Entitätsfilterkombinationen beschränkt, bei denen jede Kombination aus gefilterter Art und Namespace als separater Filter auf dieses Limit angerechnet wird.

Console

In der Console können Sie entweder alle Arten oder nur eine bestimmte Art auswählen. Ebenso können Sie alle Namespaces oder einen bestimmten Namespace auswählen.

Wenn Sie eine Liste der zu exportierenden Namespaces und Arten angeben möchten, verwenden Sie stattdessen gcloud.

  1. Rufen Sie in der Google Cloud Console die Seite Datastore Export auf.

    Zur Datastore-Exportseite

  2. Klicken Sie auf Exportieren.

  3. Legen Sie das Feld Namespace auf All Namespaces oder auf den Namen eines Ihrer Namespaces fest.

  4. Legen Sie für das Feld Kind (Art) All Kinds oder den Namen einer Art fest.

  5. Geben Sie unter Ziel den Namen Ihres Cloud Storage-Buckets ein.

  6. Klicken Sie auf Exportieren.

Die Konsole kehrt zur Seite Import/Export zurück. Eine Benachrichtigung meldet den Erfolg oder Misserfolg Ihrer verwalteten Exportanfrage.

gcloud

gcloud datastore export --kinds="KIND1,KIND2" --namespaces="(default),NAMESPACE2" gs://bucket-name --async

Dabei ist bucket-name der Name Ihres Cloud Storage-Buckets und ein optionales Präfix, z. B. bucket-name/datastore-exports/export-name. Sie können nicht dasselbe Präfix für einen anderen Exportvorgang verwenden. Wenn Sie kein Dateipräfix angeben, erstellt der verwaltete Exportdienst ein Präfix anhand der aktuellen Uhrzeit.

Mit dem Flag --async verhindern Sie, dass gcloud auf den Abschluss des Vorgangs wartet. Wenn Sie das Flag --async weglassen, können Sie Ctrl+c eingeben, um auf den Vorgang zu warten. Dadurch wird der Vorgang nicht abgebrochen.

Ausruhen

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • project-id: Ihre Projekt-ID
  • bucket-name: der Name Ihres Cloud Storage-Buckets
  • kind: die Entitätsart
  • namespace: die Namespace-ID (für die Standard-Namespace-ID verwenden)

HTTP-Methode und URL:

POST https://datastore.googleapis.com/v1/projects/project-id:export

JSON-Text anfordern:

{
  "outputUrlPrefix": "gs://bucket-name",
  "entityFilter": {
    "kinds": ["kind"],
    "namespaceIds": ["namespace"],
  },
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "name": "projects/project-id/operations/operation-id",
  "metadata": {
    "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
    "common": {
      "startTime": "2019-09-18T21:17:36.232704Z",
      "operationType": "EXPORT_ENTITIES",
      "state": "PROCESSING"
    },
    "entityFilter": {
      "kinds": [
        "Task"
      ],
      "namespaceIds": [
        ""
      ]
    },
    "outputUrlPrefix": "gs://bucket-name/2019-09-18T21:17:36_82974"
  }
}
Die Antwort ist ein Vorgang mit langer Ausführungszeit, den Sie auf Abschluss prüfen können.

Metadatendateien

Beim Exportvorgang wird für jedes angegebene Namespace-Art-Paar eine Metadatendatei erstellt. Metadatendateien heißen in der Regel NAMESPACE_NAME_KIND_NAME.export_metadata. Wenn jedoch ein Namespace oder eine Art einen ungültigen Cloud Storage-Objektnamen erstellen würde, hat die Datei den Namen export[NUM].export_metadata.

Die Metadatendateien sind Protokollpuffer und können mit dem Protokollkompilierer protoc decodiert werden. Sie können beispielsweise eine Metadatendatei decodieren, um den Namespace und die Arten der Exportdateien zu ermitteln:

protoc --decode_raw < export0.export_metadata

Alle Entitäten importieren

Console

  1. Rufen Sie in der Google Cloud Console die Seite Datastore-Import auf.

    Zur Seite "Datastore-Import"

  2. Klicken Sie auf Importieren.

  3. Klicken Sie im Feld File auf Durchsuchen und wählen Sie eine overall_export_metadata-Datei aus.

  4. Legen Sie das Feld Namespace auf All Namespaces und das Feld Kind auf All Kinds fest.

  5. Klicken Sie auf Importieren.

Die Konsole kehrt zur Seite Import/Export zurück. Eine Benachrichtigung meldet den Erfolg oder Misserfolg Ihrer verwalteten Importanfrage.

gcloud

Verwenden Sie den Befehl gcloud datastore import, um alle Entitäten zu importieren, die zuvor mit dem verwalteten Exportdienst exportiert wurden.

gcloud datastore import gs://bucket-name/file-path/file-name.overall_export_metadata --async

Dabei ist bucket-name/file-path/file-name der Pfad zu Ihrer Datei overall_export_metadata in Ihrem Cloud Storage-Bucket.

Mit dem Flag --async verhindern Sie, dass gcloud auf den Abschluss des Vorgangs wartet. Wenn Sie das Flag --async weglassen, können Sie Ctrl+c eingeben, um auf den Vorgang zu warten. Dadurch wird der Vorgang nicht abgebrochen.

Ausruhen

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • project-id: Ihre Projekt-ID
  • bucket-name: der Name Ihres Cloud Storage-Buckets
  • object-name: der Name Ihres Cloud Storage-Objekts (Beispiel: 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata)

HTTP-Methode und URL:

POST https://datastore.googleapis.com/v1/projects/project-id:import

JSON-Text anfordern:

{
  "inputUrl": "gs://bucket-name/object-name",
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "name": "projects/project-id/operations/operation-id",
  "metadata": {
    "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata",
    "common": {
      "startTime": "2019-09-18T21:25:02.863621Z",
      "operationType": "IMPORT_ENTITIES",
      "state": "PROCESSING"
    },
    "entityFilter": {},
    "inputUrl": "gs://bucket-name/2019-09-18T18:42:26_85726/2019-09-18T18:42:26_85726.overall_export_metadata"
  }
}
Die Antwort ist ein Vorgang mit langer Ausführungszeit, den Sie auf Abschluss prüfen können.

overall_export_metadata-Datei suchen

Sie können den Wert für den Importspeicherort mit dem Cloud Storage-Browser in der Google Cloud Console ermitteln:

Cloud Storage-Browser öffnen

Sie können auch abgeschlossene Vorgänge auflisten und beschreiben. Das Feld outputURL enthält den Namen der Datei overall_export_metadata:

"outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata",

Bestimmte Arten oder Namespaces importieren

Wenn Sie eine bestimmte Teilmenge von Arten und/oder Namespaces importieren möchten, geben Sie einen Entitätsfilter mit Werten für Arten und Namespace-IDs an.

Arten und Namespaces können Sie nur angeben, wenn die Exportdateien mit einem Entitätsfilter erstellt wurden. Der Import einer Teilmenge von Arten und Namespaces aus einem Export aller Entitäten ist nicht möglich.

Console

In der Console können Sie entweder alle Arten oder nur eine bestimmte Art auswählen. Ebenso können Sie alle Namespaces oder einen bestimmten Namespace auswählen.

Verwenden Sie stattdessen gcloud, um eine Liste der Namespaces und Arten zu importieren, die importiert werden sollen.

  1. Rufen Sie in der Google Cloud Console die Seite Datastore-Import auf.

    Zur Seite "Datastore-Import"

  2. Klicken Sie auf Importieren.

  3. Klicken Sie im Feld File auf Durchsuchen und wählen Sie eine overall_export_metadata-Datei aus.

  4. Legen Sie für das Feld Namespace den Wert All Namespaces oder einen bestimmten Namespace fest.

  5. Legen Sie für das Feld Art den Wert All Kinds oder eine bestimmte Art fest.

  6. Klicken Sie auf Importieren.

Die Konsole kehrt zur Seite Import/Export zurück. Eine Benachrichtigung meldet den Erfolg oder Misserfolg Ihrer verwalteten Importanfrage.

gcloud

gcloud datastore import --kinds="KIND1,KIND2" --namespaces="(default),NAMESPACE2" gs://bucket-name/file-path/file-name.overall_export_metadata --async

Dabei ist bucket-name/file-path/file-name der Pfad zu Ihrer Datei overall_export_metadata in Ihrem Cloud Storage-Bucket.

Mit dem Flag --async verhindern Sie, dass gcloud auf den Abschluss des Vorgangs wartet. Wenn Sie das Flag --async weglassen, können Sie Ctrl+c eingeben, um auf den Vorgang zu warten. Dadurch wird der Vorgang nicht abgebrochen.

Ausruhen

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • project-id: Ihre Projekt-ID
  • bucket-name: der Name Ihres Cloud Storage-Buckets
  • object-name: der Name Ihres Cloud Storage-Objekts (Beispiel: 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata)
  • kind: die Entitätsart
  • namespace: die Namespace-ID (für die Standard-Namespace-ID verwenden)

HTTP-Methode und URL:

POST https://datastore.googleapis.com/v1/projects/project-id:import

JSON-Text anfordern:

{
  "inputUrl": "gs://bucket-name/object-name",
  "entityFilter": {
    "kinds": ["kind"],
    "namespaceIds": ["namespace"],
  },
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "name": "projects/project-id/operations/operation-id",
  "metadata": {
    "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata",
    "common": {
      "startTime": "2019-09-18T21:51:02.830608Z",
      "operationType": "IMPORT_ENTITIES",
      "state": "PROCESSING"
    },
    "entityFilter": {
      "kinds": [
        "Task"
      ],
      "namespaceIds": [
        ""
      ]
    },
    "inputUrl": "gs://bucket-name/2019-09-18T21:49:25_96833/2019-09-18T21:49:25_96833.overall_export_metadata"
  }
}
Die Antwort ist ein Vorgang mit langer Ausführungszeit, den Sie auf Abschluss prüfen können.

Transformationen importieren

Wenn Sie Entitäten aus einem anderen Projekt importieren, beachten Sie, dass Entitätsschlüssel die Projekt-ID enthalten. Ein Importvorgang aktualisiert Entitätenschlüssel und Schlüsselreferenzattribute in den Importdaten mit der Projekt-ID des Zielprojekts. Wenn durch diese Aktualisierung die Entitätsgröße erhöht wird, kann dies dazu führen, dass die Entität zu groß ist oder Indexeinträge zu groß für Importvorgänge sind.

Importieren Sie zur Vermeidung eines Fehlers in ein Zielprojekt mit einer kürzeren Projekt-ID. Dies wirkt sich nicht auf Importvorgänge mit Daten aus demselben Projekt aus.

Lang andauernde Vorgänge verwalten

Verwaltete Import- und Exportvorgänge sind lang andauernde Vorgänge. Das Ausführen dieser Methoden kann viel Zeit in Anspruch nehmen.

Nachdem Sie einen Export- oder Importvorgang gestartet haben, weist der Datastore-Modus dem Vorgang einen eindeutigen Namen zu. Sie können den Vorgangsnamen verwenden, um den Vorgang zu löschen, abzubrechen oder den Status zu prüfen.

Vorgangsnamen haben das Präfix projects/[PROJECT_ID]/databases/(default)/operations/, zum Beispiel:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Sie können das Präfix weglassen, wenn Sie einen Vorgangsnamen für gcloud-Befehle angeben.

Alle lang andauernden Vorgänge auflisten

Sie können laufende und kürzlich abgeschlossene Vorgänge auf folgende Arten aufrufen: Nach Abschluss werden einige Vorgänge aufgelistet:

Console

Eine Liste der letzten Export- und Importvorgänge finden Sie in der Google Cloud Console auf der Seite Import/Export im Datastore-Modus.

Zur Seite Import/Export“

gcloud

Verwenden Sie zum Auflisten lang andauernder Vorgänge den Befehl gcloud datastore operations list.

gcloud datastore operations list

Ein kürzlich abgeschlossener Exportvorgang enthält beispielsweise die folgenden Informationen:

{
  "operations": [
    {
      "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
        "common": {
          "startTime": "2017-12-05T23:01:39.583780Z",
          "endTime": "2017-12-05T23:54:58.474750Z",
          "operationType": "EXPORT_ENTITIES"
        },
        "progressEntities": {
          "workCompleted": "21933027",
          "workEstimated": "21898182"
        },
        "progressBytes": {
          "workCompleted": "12421451292",
          "workEstimated": "9759724245"
        },
        "entityFilter": {
          "namespaceIds": [
            ""
          ]
        },
        "outputUrlPrefix": "gs://bucket-name"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse",
        "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata"
      }
    }
  ]
}

Ausruhen

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • project-id: Ihre Projekt-ID

HTTP-Methode und URL:

GET https://datastore.googleapis.com/v1/projects/project-id/operations

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Informationen zur Antwort finden Sie unten.

Ein kürzlich abgeschlossener Exportvorgang enthält beispielsweise die folgenden Informationen:

{
  "operations": [
    {
      "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
        "common": {
          "startTime": "2017-12-05T23:01:39.583780Z",
          "endTime": "2017-12-05T23:54:58.474750Z",
          "operationType": "EXPORT_ENTITIES"
        },
        "progressEntities": {
          "workCompleted": "21933027",
          "workEstimated": "21898182"
        },
        "progressBytes": {
          "workCompleted": "12421451292",
          "workEstimated": "9759724245"
        },
        "entityFilter": {
          "namespaceIds": [
            ""
          ]
        },
        "outputUrlPrefix": "gs://bucket-name"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse",
        "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata"
      }
    }
  ]
}

Vorgangsstatus prüfen

So zeigen Sie den Status eines lang andauernden Vorgangs an:

Console

Eine Liste der letzten Export- und Importvorgänge finden Sie in der Google Cloud Console auf der Seite Import/Export im Datastore-Modus.

Zur Seite Import/Export“

gcloud

Verwenden Sie den Befehl operations describe, um den Status eines lang andauernden Vorgangs aufzurufen.

gcloud datastore operations describe operation-name

Ausruhen

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • project-id: Ihre Projekt-ID
  • operation-name: der Name des Vorgangs

HTTP-Methode und URL:

GET https://datastore.googleapis.com/v1/projects/project-id/operations/operation-name

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "name": "projects/project-id/operations/ASA3ODAwMzQxNjIyChp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKLRI",
  "metadata": {
    "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
    "common": {
      "startTime": "2019-10-08T20:07:28.105236Z",
      "endTime": "2019-10-08T20:07:36.310653Z",
      "operationType": "EXPORT_ENTITIES",
      "state": "SUCCESSFUL"
    },
    "progressEntities": {
      "workCompleted": "21",
      "workEstimated": "21"
    },
    "progressBytes": {
      "workCompleted": "2272",
      "workEstimated": "2065"
    },
    "entityFilter": {},
    "outputUrlPrefix": "gs://bucket-name/2019-10-08T20:07:28_28481"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse",
    "outputUrl": "gs://bucket-name/2019-10-08T20:07:28_28481/2019-10-08T20:07:28_28481.overall_export_metadata"
  }
}

Fertigstellungszeit schätzen

Während der Ausführung eines Vorgangs wird im Status des Felds state der Gesamtstatus des Vorgangs angezeigt.

Eine Anfrage für den Status eines lang andauernden Vorgangs gibt die Messwerte workEstimated und workCompleted zurück. Jeder dieser Messwerte wird sowohl in der Anzahl der Byte als auch in der Anzahl der Entitäten zurückgegeben:

  • workEstimated zeigt die geschätzte Gesamtzahl der Byte und Dokumente an, die von einem Vorgang verarbeitet werden.

  • workCompleted gibt die Anzahl der bisher verarbeiteten Byte und Dokumente an. Nach Abschluss des Vorgangs wird im Feld die Gesamtzahl der tatsächlich verarbeiteten Byte und Dokumente angezeigt, die unter Umständen größer als der Wert von workEstimated ist.

Teilen Sie workCompleted durch workEstimated, um den ungefähren Fortschritt zu schätzen. Diese Schätzung ist möglicherweise ungenau, da sie von der verzögerten Statistikerfassung abhängt.

Hier ist zum Beispiel der Fortschritt des Exportvorgangs:

{
  "operations": [
    {
      "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
        ...
        "progressEntities": {
          "workCompleted": "1",
          "workEstimated": "3"
        },
        "progressBytes": {
          "workCompleted": "85",
          "workEstimated": "257"
        },
        ...

Wenn ein Vorgang abgeschlossen ist, enthält die Vorgangsbeschreibung "done": true. Das Ergebnis des Vorgangs finden Sie im Wert des Felds state. Wenn das Feld done nicht in der Antwort festgelegt ist, lautet der Wert false. Verlassen Sie sich bei laufenden Vorgängen nicht auf den Wert done.

Vorgang abbrechen

Console

Auf der Seite Import/Export im Datastore-Modus der Google Cloud Console können Sie einen laufenden Export- oder Importvorgang abbrechen.

Zur Seite Import/Export“

In der Tabelle Aktuelle Importe und Exporte enthalten derzeit ausgeführte Vorgänge die Schaltfläche Abbrechen in der Spalte Abgeschlossen. Klicken Sie auf die Schaltfläche Abbrechen, um den Vorgang zu beenden. Die Schaltfläche ändert sich in eine Cancelling-Meldung und dann in Canceled, wenn der Vorgang vollständig beendet wird.

gcloud

Verwenden Sie den Befehl operations cancel, um einen laufenden Vorgang zu beenden:

gcloud datastore operations cancel operation-name

Durch Abbrechen eines laufenden Vorgangs wird der Vorgang nicht rückgängig gemacht. Bei einem abgebrochenen Exportvorgang werden bereits in Cloud Storage exportierte Dokumente beibehalten. Bei einem abgebrochenen Importvorgang werden die bereits an der Datenbank vorgenommenen Aktualisierungen beibehalten. Sie können einen teilweise abgeschlossenen Export nicht importieren.

Vorgang löschen

gcloud

Verwenden Sie den Befehl operations delete, um einen Vorgang aus der Liste der letzten Vorgänge zu entfernen. Mit diesem Befehl werden Exportdateien nicht aus Cloud Storage gelöscht.

gcloud datastore operations delete operation-name

Abrechnung und Preise für verwaltete Exporte und Importe

Sie müssen die Abrechnung für Ihr Google Cloud-Projekt aktivieren, bevor Sie den verwalteten Export- und Importdienst verwenden können. Export- und Importvorgänge tragen auf folgende Weise zu Ihren Google Cloud-Kosten bei:

Die Kosten für Export- und Importvorgänge werden nicht auf das Ausgabenlimit von App Engine angerechnet. Export- oder Importvorgänge lösen erst nach Abschluss Google Cloud-Budgetbenachrichtigungen aus. Die während eines Export- oder Importvorgangs ausgeführten Lese- und Schreibvorgänge werden nach Abschluss des Vorgangs auf Ihr tägliches Kontingent angerechnet.

Export- und Importkosten aufrufen

Bei Export- und Importvorgängen wird das Label goog-firestoremanaged:exportimport auf in Rechnung gestellte Vorgänge angewendet. Auf der Seite Cloud Billing-Berichte können Sie mit diesem Label die Kosten für Import- und Exportvorgänge aufrufen:

Greifen Sie über das Filtermenü auf das Label &quot;goog-firestoremanaged&quot; zu.

Berechtigungen

Zum Ausführen von Export- und Importvorgängen benötigen Ihr Nutzerkonto und das Standarddienstkonto Ihres Projekts die unten beschriebenen Berechtigungen für Identitäts- und Zugriffsverwaltung.

Nutzerkontoberechtigungen

Das Nutzerkonto oder Dienstkonto, das den Vorgang initiiert, erfordert die IAM-Berechtigungen datastore.databases.export und datastore.databases.import. Wenn Sie der Projektinhaber sind, hat Ihr Konto die erforderlichen Berechtigungen. Andernfalls gewähren die folgenden IAM-Rollen die erforderlichen Berechtigungen:

  • Datastore-Inhaber
  • Datastore Import-Export-Administrator

Sie können diese Berechtigungen auch mit einer benutzerdefinierten Rolle zuweisen.

Ein Projektinhaber kann eine dieser Rollen mithilfe der Schritte unter Zugriffsrechte erteilen zuweisen.

Standardberechtigungen für Dienstkonten

Jedes Google Cloud-Projekt erstellt automatisch ein Standarddienstkonto mit dem Namen PROJECT_ID@appspot.gserviceaccount.com. Export- und Importvorgänge verwenden dieses Dienstkonto, um Cloud Storage-Vorgänge zu autorisieren.

Das Standarddienstkonto Ihres Projekts erfordert Zugriff auf den Cloud Storage-Bucket, der in einem Export- oder Importvorgang verwendet wird. Wenn sich der Cloud Storage-Bucket im selben Projekt wie Ihre Datenbank im Datastore-Modus befindet, hat das Standarddienstkonto standardmäßig Zugriff auf den Bucket.

Wenn sich der Cloud Storage-Bucket in einem anderen Projekt befindet, müssen Sie dem Standarddienstkonto Zugriff auf den Cloud Storage-Bucket gewähren.

Dem Standarddienstkonto Rollen zuweisen

Sie können das gsutil-Befehlszeilentool verwenden, um eine der unten genannten Rollen zuzuweisen. Führen Sie beispielsweise folgenden Befehl aus, um dem Standarddienstkonto die Rolle "Storage-Administrator" zuzuweisen:

gsutil iam ch serviceAccount:[PROJECT_ID]@appspot.gserviceaccount.com:roles/storage.admin \
    gs://[BUCKET_NAME]

Alternativ können Sie diese Rolle über die Cloud Console zuweisen.

Exportvorgänge

Ändern Sie bei Exportvorgängen mit einem Bucket in einem anderen Projekt die Berechtigungen des Buckets, um dem Standarddienstkonto des Projekts, das Ihre Datenbank im Datastore-Modus enthält, eine der folgenden Cloud Storage-Rollen zuzuweisen:

  • Storage-Administrator
  • Storage-Objekt-Administrator
  • Autor alter Storage-Buckets

Sie können auch eine benutzerdefinierte IAM-Rolle mit etwas anderen Berechtigungen als den in den oben aufgeführten Rollen erstellen:

  • storage.buckets.get
  • storage.objects.create
  • storage.objects.delete
  • storage.objects.list

Importvorgänge

Ändern Sie bei Importvorgängen mit einem Cloud Storage-Bucket in einem anderen Projekt die Berechtigungen des Buckets, um dem Standarddienstkonto des Projekts, das Ihre Datenbank im Datastore-Modus enthält, eine der folgenden Cloud Storage-Rollen zuzuweisen:

  • Storage-Administrator
  • Sowohl Storage-Objekt-Betrachter als auch Storage Legacy Bucket-Leser

Sie können auch eine benutzerdefinierte IAM-Rolle mit den folgenden Berechtigungen erstellen:

  • storage.buckets.get
  • storage.objects.get

Standarddienstkonto deaktiviert oder gelöscht

Wenn Sie Ihr App Engine-Standarddienstkonto deaktivieren oder löschen, verliert Ihre App Engine-Anwendung den Zugriff auf Ihre Datenbank im Datastore-Modus. Wenn Sie Ihr App Engine-Dienstkonto deaktiviert haben, können Sie es wieder aktivieren. Weitere Informationen finden Sie unter Dienstkonto aktivieren. Wenn Sie Ihr App Engine-Dienstkonto innerhalb der letzten 30 Tage gelöscht haben, können Sie Ihr Dienstkonto wiederherstellen, siehe Dienstkonto wiederherstellen.

Unterschiede zu Datastore Admin-Sicherungen

Wenn Sie zuvor die Datastore Admin-Konsole für Sicherungen verwendet haben, sollten Sie die folgenden Unterschiede beachten:

  • Exporte, die von einem verwalteten Export erstellt wurden, werden nicht in der Datastore Admin-Konsole angezeigt. Verwaltete Exporte und Importe sind ein neuer Dienst, der keine Daten mit der Sicherungs- und Wiederherstellungsfunktion von App Engine teilt, die über die Cloud Console verwaltet wird.

  • Der verwaltete Export- und Importdienst unterstützt nicht dieselben Metadaten wie die Datastore Admin-Sicherung und speichert den Fortschrittsstatus nicht in Ihrer Datenbank. Informationen zum Prüfen des Fortschritts von Export- und Importvorgängen finden Sie unter Lang andauernde Vorgänge verwalten.

  • Sie können Dienstlogs von verwalteten Export- und Importvorgängen nicht ansehen.

  • Der verwaltete Importdienst ist abwärtskompatibel mit Datastore Admin-Sicherungsdateien. Sie können eine Datastore Admin-Sicherungsdatei mithilfe des verwalteten Importdienstes importieren. Die Ausgabe eines verwalteten Exports lässt sich jedoch nicht über die Datastore Admin-Konsole importieren.

In BigQuery importieren

Informationen zum Importieren von Daten aus einem verwalteten Export in BigQuery finden Sie unter Daten des Datastore-Exportdienstes laden.

Daten, die ohne Angabe eines Entitätsfilters exportiert wurden, können nicht in BigQuery geladen werden. Wenn Sie Daten in BigQuery importieren möchten, muss die Exportanfrage im Entitätsfilter einen oder mehrere Artnamen enthalten.

BigQuery-Spaltenlimit

In BigQuery gilt ein Limit von 10.000 Spalten pro Tabelle. Exportvorgänge generieren ein BigQuery-Tabellenschema für jede Art. In diesem Schema wird jedes Attribut innerhalb einer Entität eines Typs zu einer Schemaspalte.

Wenn das BigQuery-Schema einer Art 10.000 Spalten überschreitet, versucht der Exportvorgang, unter dem Spaltenlimit zu bleiben, indem eingebettete Entitäten als Blobs behandelt werden. Wenn durch diese Konvertierung die Anzahl der Spalten im Schema unter 10.000 liegt, können Sie die Daten in BigQuery laden, aber Sie können nicht die Attribute in eingebetteten Entitäten abfragen. Wenn die Anzahl der Spalten immer noch 10.000 überschreitet, generiert der Exportvorgang kein BigQuery-Schema für die Art und Sie können die Daten nicht in BigQuery laden.

Dienst-Agent-Migration

Sie können jetzt einen Firestore-Dienst-Agent verwenden, um Import- und Exportvorgänge anstelle des App Engine-Dienstkontos zu autorisieren. Der Dienst-Agent und das Dienstkonto verwenden die folgenden Namenskonventionen:

Firestore-Dienst-Agent
service-project_number@gcp-sa-firestore.iam.gserviceaccount.com
App Engine-Dienstkonto
project_id@appspot.gserviceaccount.com

Der Firestore-Dienst-Agent ist besser, da er für Firestore spezifisch ist. Das App Engine-Dienstkonto wird von mehreren Diensten gemeinsam genutzt.

Sie können zum Firestore-Dienst-Agent mit einer der folgenden Methoden migrieren:

Die erste dieser Methoden ist zu bevorzugen, da sie den Umfang der Auswirkungen auf ein einzelnes Projekt im Datastore-Modus lokalisiert. Das zweite Verfahren wird nicht bevorzugt, da vorhandene Berechtigungen in Cloud Storage-Buckets nicht migriert werden. Es bietet jedoch Sicherheitscompliance auf Organisationsebene.

Durch Prüfen und Aktualisieren der Berechtigungen des Cloud Storage-Buckets migrieren

Der Migrationsprozess besteht aus zwei Schritten:

  1. Berechtigungen für Cloud Storage-Bucket aktualisieren Weitere Informationen finden Sie im folgenden Abschnitt.
  2. Bestätigen Sie die Migration zum Firestore-Dienst-Agent.

Berechtigungen für Dienst-Agent-Buckets

Für alle Export- oder Importvorgänge, die einen Cloud Storage-Bucket in einem anderen Projekt verwenden, müssen Sie dem Firestore-Dienst-Agent Berechtigungen für diesen Bucket gewähren. Zum Beispiel müssen Vorgänge, die Daten in ein anderes Projekt verschieben, auf einen Bucket in diesem anderen Projekt zugreifen. Andernfalls schlagen diese Vorgänge nach der Migration zum Firestore-Dienst-Agent fehl.

Für Import- und Export-Workflows, die innerhalb desselben Projekts bleiben, sind keine Änderungen an Berechtigungen erforderlich. Der Firestore-Dienst-Agent kann standardmäßig auf Buckets im selben Projekt zugreifen.

Aktualisieren Sie die Berechtigungen für Cloud Storage-Buckets aus anderen Projekten, um dem Dienst-Agent service-project_number@gcp-sa-firestore.iam.gserviceaccount.com Zugriff zu gewähren. Weisen Sie dem Dienst-Agent die Rolle Firestore Service Agent zu.

Die Rolle Firestore Service Agent gewährt Lese- und Schreibberechtigungen für einen Cloud Storage-Bucket. Wenn Sie nur Lese- oder nur Schreibberechtigungen gewähren möchten, verwenden Sie eine benutzerdefinierte Rolle.

Mit dem im folgenden Abschnitt beschriebenen Migrationsprozess können Sie Cloud Storage-Buckets identifizieren, die möglicherweise Aktualisierungen von Berechtigungen erfordern.

Projekt zum Firestore-Dienst-Agent migrieren

Führen Sie die folgenden Schritte aus, um vom App Engine-Dienstkonto zum Firestore-Dienst-Agent zu migrieren. Die Migration kann anschließend nicht mehr rückgängig gemacht werden.

  1. Rufen Sie in der Google Cloud Console die Seite Datastore Import/Export auf.

    Zur Seite Import/Export“

  2. Wenn Ihr Projekt noch nicht zum Firestore-Dienst-Agent migriert wurde, werden ein Banner mit einer Beschreibung der Migration und die Schaltfläche Bucket-Status prüfen angezeigt. Im nächsten Schritt können Sie potenzielle Berechtigungsfehler ermitteln und beheben.

    Klicken Sie auf Bucket-Status prüfen.

    Ein Menü mit der Option zum Abschließen der Migration und eine Liste der Cloud Storage-Buckets werden angezeigt. Es kann einige Minuten dauern, bis die Liste vollständig geladen ist.

    Diese Liste enthält Buckets, die kürzlich in Import- und Exportvorgängen verwendet wurden, die aber derzeit keine Lese- und Schreibberechtigungen für den Dienstmodus des Datastore-Modus gewähren.

  3. Notieren Sie sich den Hauptnamen des Dienst-Agents für den Datastore-Modus Ihres Projekts. Der Name des Dienst-Agents wird unter dem Label Dienst-Agent, dem Zugriff gewährt werden soll angezeigt.
  4. Führen Sie für alle Buckets in der Liste, die Sie für zukünftige Import- oder Exportvorgänge verwenden, die folgenden Schritte aus:

    1. Klicken Sie in der Tabellenzeile dieses Buckets auf Beheben. Dadurch wird die Berechtigungsseite dieses Buckets in einem neuen Tab geöffnet.

    2. Klicken Sie auf Add.
    3. Geben Sie im Feld Neue Hauptkonten den Namen Ihres Firestore-Dienst-Agents ein.
    4. Wählen Sie im Feld Rolle auswählen die Option Dienst-Agents &Firestore; Dienst-Agent aus.
    5. Klicken Sie auf Speichern.
    6. Kehren Sie zum Tab mit der Seite Import/Export“ im Datastore-Modus zurück.
    7. Wiederholen Sie diese Schritte für andere Buckets in der Liste. Sehen Sie sich alle Seiten der Liste an.
  5. Klicken Sie auf Zu Firestore-Dienst-Agent migrieren. Wenn noch Buckets mit Berechtigungsprüfungen vorhanden sind, klicken Sie auf Migrieren, um die Migration zu bestätigen.

    Sie werden benachrichtigt, wenn die Migration abgeschlossen ist. Die Migration kann nicht rückgängig gemacht werden.

Migrationsstatus ansehen

Rufen Sie zum Prüfen des Migrationsstatus Ihres Projekts in der Google Cloud Console die Seite Import/Export auf:

Zur Seite Import/Export“

Suchen Sie nach dem Hauptkonto neben dem Label Verwendetes Dienstkonto:.

Wenn das Hauptkonto service-project_number@gcp-sa-firestore.iam.gserviceaccount.com ist, wurde Ihr Projekt bereits zum Firestore-Dienst-Agent migriert. Die Migration kann nicht rückgängig gemacht werden.

Wenn das Projekt nicht migriert wurde, wird oben auf der Seite ein Banner mit der Schaltfläche Bucket-Status prüfen angezeigt. Informationen zum Ausführen der Migration finden Sie unter Zum Firestore-Dienst-Agent migrieren.

Organisationsweite Richtlinieneinschränkung hinzufügen

Legen Sie die folgende Einschränkung in Ihrer Organisationsrichtlinie fest:

Firestore-Agent für Import/Export erforderlich (firestore.requireP4SAforImportExport).

Diese Einschränkung erfordert Import- und Exportvorgänge, um den Firestore-Dienst-Agent zur Autorisierung von Anfragen zu verwenden.

Informationen zum Festlegen dieser Einschränkung finden Sie unter Organisationsrichtlinien erstellen und verwalten.

Durch die Anwendung dieser Richtlinieneinschränkung auf Organisationsebene werden dem entsprechenden Cloud Storage-Bucket-Berechtigungen nicht automatisch die entsprechenden Berechtigungen für den Cloud Storage-Bucket erteilt.

Wenn die Einschränkung Berechtigungsfehler für Import- oder Exportworkflows erstellt, können Sie sie deaktivieren, um wieder das Standarddienstkonto zu verwenden. Nachdem Sie die Cloud Storage-Bucket-Berechtigungen überprüft und aktualisiert haben, können Sie die Einschränkung wieder aktivieren.