Importa y exporta entidades

En esta página, se describe cómo importar y exportar entidades de Firestore en modo Datastore mediante el servicio administrado de importación y exportación. El servicio administrado de importación y exportación está disponible a través de Cloud Console, la herramienta de línea de comandos de gcloud y la API de Administrador de Datastore (REST, RPC).

Gracias al servicio administrado de importación y exportación, es posible recuperar el sistema de la eliminación accidental de datos y exportar datos de procesamiento sin conexión. Puedes exportar todas las entidades o solo categorías específicas de entidades. Asimismo, puedes importar todos los datos de una exportación o solo categorías específicas. Cuando uses este servicio, ten en cuenta lo siguiente:

  • El servicio de exportación usa lecturas de coherencia eventual. No puedes suponer que una exportación ocurre en un momento específico. La exportación podría incluir entidades escritas después de su comienzo y excluir otras escritas antes.

  • Una exportación no contiene índices. Cuando importas datos, los índices necesarios se vuelven a compilar de forma automática mediante las definiciones de índice actuales de tu base de datos. La configuración de índice de valor de propiedad por entidad se exporta y se respeta durante la importación.

  • Las importaciones no asignan ID nuevos a las entidades. Las importaciones usan los ID que existían en el momento de la exportación y reemplazan cualquier entidad existente con el mismo ID. Durante una importación, los ID se reservan durante el tiempo en que se importan las entidades. Esta característica evita conflictos de ID con las entidades nuevas si las operaciones de escritura están habilitadas mientras una importación está activa.

  • Si la importación no afecta a una entidad de tu base de datos, esta se conservará cuando la operación finalice.

  • Los datos exportados desde una base de datos en modo Datastore pueden importarse a otra, incluso si está en otro proyecto.

  • El límite que establece el servicio administrado de importaciones y exportaciones es de 50 importaciones y exportaciones simultáneas y permite un máximo de 20 solicitudes de importación y exportación por minuto para un proyecto. Para cada solicitud, el servicio limita a 100 la cantidad de combinaciones del filtro de entidad.

  • El resultado de una exportación administrada usa el formato de registro LevelDB.

  • Para importar solo un subconjunto de entidades o importar datos en BigQuery, debes especificar un filtro de entidad en tu exportación.

Antes de comenzar

Antes de usar el servicio administrado de importación y exportación, debes completar las siguientes tareas:

  1. Habilita la facturación para tu proyecto de Google Cloud. Solo los proyectos de Google Cloud que tengan la facturación habilitada pueden usar la función de importación y exportación.

  2. Crea un depósito de Cloud Storage en la misma ubicación que la base de datos de Firestore en modo Datastore. No puedes usar un bucket de pagos del solicitante para las operaciones de importación y exportación.

  3. Asigna una función de IAM a tu cuenta de usuario que otorgue el permiso datastore.databases.export, si quieres exportar datos, o datastore.databases.import, si quieres importarlos. Por ejemplo, la función Datastore Import Export Admin otorga ambos permisos.

  4. Si el depósito de Cloud Storage está en otro proyecto, otorga acceso al depósito a la cuenta de servicio predeterminada de tu proyecto.

Configura gcloud para tu proyecto

Si planeas usar gcloud para iniciar las operaciones de importación y exportación, configura gcloud y conéctate al proyecto de una de las siguientes maneras:

Inicia operaciones administradas de importación y exportación

En esta sección, se describe cómo iniciar una operación administrada de exportación o importación.

Exporta todas las entidades

Console

  1. Ve a la página de exportación de entidades de Datastore en Google Cloud Console.

    Ir a la página de exportación de Datastore

  2. Establece el campo Espacio de nombres en All Namespaces y el campo Tipo en All Kinds.

  3. Debajo de Destino, ingresa el nombre de tu depósito de Cloud Storage.

  4. Haz clic en Exportar.

La consola abre la página Entidades y, también, informa sobre el éxito o el fracaso de tu solicitud de exportación administrada.

La consola también muestra el botón Ver estado. Haz clic en este botón a fin de abrir una terminal de Cloud Shell que se propagó con anterioridad con el comando de gcloud que se necesita para ver el estado de la operación.

Ejecuta este comando cuando desees ver el estado de la operación.

gcloud

Usa el comando gcloud datastore export para exportar todas las entidades de tu base de datos.

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

En el ejemplo anterior, bucket-name es el nombre del depósito de Cloud Storage y un prefijo opcional, por ejemplo, bucket-name/firestore-exports/export-name. No puedes volver a usar el mismo prefijo para otra operación de exportación. Si no proporcionas un prefijo de archivo, el servicio administrado de exportación crea uno basado en la hora actual.

Usa la marca --async para evitar que gcloud espere a que se complete la operación. Si omites la marca --async, puedes escribir Ctrl+c para dejar de esperar una operación. Esto no cancelará la operación.

rest

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

  • project-id: Es el ID de tu proyecto.
  • bucket-name: Es el nombre del depósito de Cloud Storage.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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"
  }
}
La respuesta es una operación de larga duración cuya finalización se puede verificar.

Exporta tipos o espacios de nombres específicos

Si quieres exportar un subconjunto de tipos o espacios de nombres, proporciona un filtro de entidad con valores para los ID de espacios de nombres y tipos. Cada solicitud está limitada a 100 combinaciones de filtro de entidades, y cada una de las combinaciones de tipo y espacio de nombres filtrados cuenta como un filtro diferente en este límite.

Console

En la consola puedes seleccionar todos los tipos o un tipo específico. También puedes seleccionar todos los espacios de nombres o un espacio de nombres específico.

A fin de especificar una lista de espacios de nombres y tipos para exportar, usa gcloud.

  1. Ve a la página de exportación de Datastore en Google Cloud Console.

    Ir a la página de exportación de Datastore

  2. Establece el campo Espacio de nombres en All Namespaces o el nombre de uno de tus espacios de nombres.

  3. Establece el campo Tipo en All Kinds o el nombre de un tipo.

  4. En Destino, ingresa el nombre de tu depósito de Cloud Storage.

  5. Haz clic en Exportar.

La consola abre la página Entidades y, también, informa sobre el éxito o el fracaso de tu solicitud de exportación administrada.

La consola también muestra el botón Ver estado. Haz clic en este botón a fin de abrir una terminal de Cloud Shell que se propagó con anterioridad con el comando de gcloud que se necesita para ver el estado de la operación.

Ejecuta este comando cuando desees ver el estado de la operación.

gcloud

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

En el ejemplo anterior, bucket-name es el nombre del depósito de Cloud Storage y un prefijo opcional, por ejemplo, bucket-name/firestore-exports/export-name. No puedes volver a usar el mismo prefijo para otra operación de exportación. Si no proporcionas un prefijo de archivo, el servicio administrado de exportación crea uno basado en la hora actual.

Usa la marca --async para evitar que gcloud espere a que se complete la operación. Si omites la marca --async, puedes escribir Ctrl+c para dejar de esperar una operación. Esto no cancelará la operación.

rest

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

  • project-id: Es el ID de tu proyecto.
  • bucket-name: Es el nombre del depósito de Cloud Storage.
  • kind: Es el tipo de entidad.
  • namespace: Es el ID del espacio de nombres (usa “” para el ID del espacio de nombres predeterminado).

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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"
  }
}
La respuesta es una operación de larga duración cuya finalización se puede verificar.

Archivos de metadatos

Una operación de exportación crea un archivo de metadatos para cada par de tipo y espacio de nombres especificado. Por lo general, los archivos de metadatos se denominan NAMESPACE_NAME_KIND_NAME.export_metadata. Sin embargo, si un espacio de nombres o una categoría crean un nombre de objeto de Cloud Storage no válido, el archivo se llamará export[NUM].export_metadata.

Los archivos de metadatos son búferes de protocolo y se pueden decodificar con el compilador de protocolo protoc. Por ejemplo, puedes decodificar un archivo de metadatos para determinar el espacio de nombres y las categorías que contienen los archivos de exportación:

protoc --decode_raw < export0.export_metadata

Importa todas las entidades

Console

  1. Ve a la página de importación de Datastore en Google Cloud Console.

    Ir a la página de importación de Datastore

  2. En el campo File, haz clic en Examinar y selecciona un archivo overall_export_metadata.

  3. Establece el campo Espacio de nombres en All Namespaces y el campo Tipo en All Kinds.

  4. Haz clic en Importar.

La consola abre la página Entidades y, también, informa sobre el éxito o el fracaso de tu solicitud de importación administrada.

La consola también muestra el botón Ver estado. Haz clic en este botón a fin de abrir una terminal de Cloud Shell que se propagó con anterioridad con el comando de gcloud que se necesita para ver el estado de la operación.

Ejecuta este comando cuando desees ver el estado de la operación.

gcloud

Usa el comando gcloud datastore import para importar todas las entidades que se exportaron con anterioridad con el servicio de exportación administrado.

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

En el ejemplo anterior, bucket-name/file-path/file-name es la ruta al archivo overall_export_metadata dentro del depósito de Cloud Storage.

Usa la marca --async para evitar que gcloud espere a que se complete la operación. Si omites la marca --async, puedes escribir Ctrl+c para dejar de esperar una operación. Esto no cancelará la operación.

rest

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

  • project-id: Es el ID de tu proyecto.
  • bucket-name: Es el nombre del depósito de Cloud Storage.
  • object-name: Es el nombre del objeto de Cloud Storage (ejemplo: 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata).

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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"
  }
}
La respuesta es una operación de larga duración cuya finalización se puede verificar.

Ubica tu archivo overall_export_metadata

A fin de determinar el valor que se usará para la ubicación de la importación, usa el navegador de Cloud Storage en Google Cloud Console:

Abre el navegador de Cloud Storage

También puedes enumerar y describir las operaciones completadas. El campo outputURL muestra el nombre del archivo overall_export_metadata:

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

Importa tipos o espacios de nombres específicos

Para importar un subconjunto específico de categorías o espacios de nombres, proporciona un filtro de entidad con valores de ID de espacios de nombres y categorías.

Solo puedes especificar categorías y espacios de nombres si los archivos de exportación se crearon con un filtro de entidad. No puedes importar un subconjunto de tipos y espacios de nombres desde una exportación de todas las entidades.

Console

En la consola puedes seleccionar todos los tipos o un tipo específico. También puedes seleccionar todos los espacios de nombres o un espacio de nombres específico.

A fin de especificar una lista de espacios de nombres y tipos para importar, usa gcloud.

  1. Ve a la página de importación de Datastore en Google Cloud Console.

    Ir a la página de importación de Datastore

  2. En el campo File, haz clic en Examinar y selecciona un archivo overall_export_metadata.

  3. Establece el campo Espacio de nombres en All Namespaces o un espacio de nombres específico.

  4. Establece el campo Tipo como All Kinds o como un tipo específico.

  5. Haz clic en Importar.

La consola abre la página Entidades y, también, informa sobre el éxito o el fracaso de tu solicitud de importación administrada.

La consola también muestra el botón Ver estado. Haz clic en este botón a fin de abrir una terminal de Cloud Shell que se propagó con anterioridad con el comando de gcloud que se necesita para ver el estado de la operación.

Ejecuta este comando cuando desees ver el estado de la operación.

gcloud

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

En el ejemplo anterior, bucket-name/file-path/file-name es la ruta al archivo overall_export_metadata dentro del depósito de Cloud Storage.

Usa la marca --async para evitar que gcloud espere a que se complete la operación. Si omites la marca --async, puedes escribir Ctrl+c para dejar de esperar una operación. Esto no cancelará la operación.

rest

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

  • project-id: Es el ID de tu proyecto.
  • bucket-name: Es el nombre del depósito de Cloud Storage.
  • object-name: Es el nombre del objeto de Cloud Storage (ejemplo: 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata).
  • kind: Es el tipo de entidad.
  • namespace: Es el ID del espacio de nombres (usa “” para el ID del espacio de nombres predeterminado).

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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"
  }
}
La respuesta es una operación de larga duración cuya finalización se puede verificar.

Importa transformaciones

Una operación de importación actualiza las claves de entidad y las propiedades de referencia de claves en los datos de importación con el ID del proyecto de destino. Si esta actualización aumenta los tamaños de entidades, puede causar errores de “entidad demasiado grande” o “entradas de índice demasiado grandes” para las operaciones de importación.

Para evitar cualquiera de los errores, importa a un proyecto de destino con un ID del proyecto más corto.

Administra operaciones de larga duración

Las operaciones administradas de importación y exportación son operaciones de larga duración. Estas llamadas de método pueden tardar bastante tiempo en completarse.

Después de iniciar una operación de importación o exportación, el modo Datastore le asigna a la operación un nombre único. Puedes usar este nombre para borrar, cancelar o verificar el estado de la operación.

Los nombres de las operaciones incluyen el prefijo projects/[PROJECT_ID]/databases/(default)/operations/. Por ejemplo:

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

Sin embargo, puedes omitir el prefijo cuando especifiques el nombre de una operación para los comandos describe, cancel, y delete.

Enumera todas las operaciones de larga duración

Para enumerar las operaciones de larga duración, usa el comando gcloud datastore operations list. Este comando enumera las operaciones en curso y las que se completaron recientemente. Las operaciones se enumeran durante algunos días luego de completarse:

gcloud

gcloud datastore operations list

rest

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

  • project-id: Es el ID de tu proyecto.

Método HTTP y URL:

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

Para enviar tu solicitud, expande una de estas opciones:

A continuación, verás información sobre la respuesta.

Por ejemplo, una operación de exportación completada recientemente muestra la siguiente información:

{
  "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"
      }
    }
  ]
}

Describe una sola operación

En lugar de enumerar todas las operaciones de larga duración, puedes enumerar los detalles de una sola operación:

gcloud

Usa el comando operations describe para mostrar el estado de una operación de importación o exportación.

gcloud datastore operations describe operation-name

rest

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

  • project-id: Es el ID de tu proyecto.
  • operation-name: Es el nombre de la operación.

Método HTTP y URL:

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

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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"
  }
}

Estima la hora de finalización

A medida que se ejecuta tu operación, mira el valor del campo state para conocer el estado general.

Una solicitud del estado de una operación de larga duración también muestra las métricas workEstimated y workCompleted. Cada una de estas métricas se muestra en cantidad de bytes y de entidades: workEstimated muestra la cantidad total estimada de bytes y de entidades que procesará una operación, según las estadísticas de base de datos. workCompleted muestra la cantidad de bytes y de entidades que se procesaron hasta el momento. Una vez que se completa la operación, workCompleted refleja la cantidad total de bytes y entidades que se procesaron, que podría ser mayor que el valor de workEstimated.

Divide workCompleted entre workEstimated para obtener una estimación aproximada del progreso. Es posible que la estimación sea inexacta, ya que depende de la demora en la recopilación de estadísticas.

Por ejemplo, este es el estado de progreso de una operación de exportación:

{
  "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"
        },
        ...

Cuando se realiza una operación, su descripción contendrá "done": true. Consulta el valor del campo state para ver el resultado de la operación. Si el campo done no está establecido en la respuesta, su valor es false. No dependas de la existencia del valor done para las operaciones en curso.

Cancela una operación

Para detener una operación en curso, usa el comando operations cancel:

gcloud datastore operations cancel operation-name

Cancelar una operación en curso no deshace su progreso. Cuando se cancela una operación de exportación, los documentos que ya se exportaron se conservan en Cloud Storage y, cuando se cancela una operación de importación, se conservan las actualizaciones que ya se efectuaron en la base de datos. No se pueden importar una exportación que se completó de forma parcial.

Borra una operación

Usa el comando operations delete para quitar una operación de la salida de operations list. Con este comando, no se borrarán los archivos de exportación de Cloud Storage.

gcloud datastore operations delete operation-name

Facturación y precios de las importaciones y exportaciones administradas

Es obligatorio que habilites la facturación en tu proyecto de Google Cloud antes de usar el servicio administrado de importación y exportación. Las operaciones de importación y exportación contribuyen a los costos de Google Cloud de las siguientes maneras:

No se consideran los costos de las operaciones de importación y exportación en el límite de gastos de App Engine. Las operaciones de importación o exportación no activarán las alertas de presupuesto en Google Cloud hasta que se completen. Así mismo, las operaciones de lectura y escritura que se realizan durante una operación de importación o exportación se aplican a tu cuota diaria una vez que la operación se completa.

Visualiza los costos de importación y exportación

En las operaciones de importación y exportación, se aplica la etiqueta goog-firestoremanaged:exportimport a las operaciones facturadas. En la página de informes de Cloud Billing, puedes usar esta etiqueta para ver los costos relacionados con las operaciones de importación y exportación:

Accede a la etiqueta goog-firestoremanaged desde el menú de filtros.

Permisos

Para ejecutar operaciones de importación y exportación, tu cuenta de usuario y la cuenta de servicio predeterminada de tu proyecto necesitan los permisos de administración de identidades y accesos que se describen a continuación.

Permisos de la cuenta de usuario

La cuenta de usuario o cuenta de servicio que inicia la operación requiere los permisos de IAM datastore.databases.export y datastore.databases.import. Si eres el propietario del proyecto, tu cuenta ya tiene los permisos necesarios. De lo contrario, las siguientes funciones de IAM otorgan los permisos necesarios:

  • Propietario de Datastore
  • Administrador de importación y exportación de Datastore

El propietario de un proyecto puede otorgar una de estas funciones si sigue los pasos en la sección sobre cómo otorgar acceso.

Permisos de la cuenta de servicio predeterminada

Cada proyecto de Google Cloud crea de forma automática una cuenta de servicio predeterminada llamada PROJECT_ID@appspot.gserviceaccount.com. Las operaciones de importación y exportación usan esta cuenta de servicio para autorizar las operaciones de Cloud Storage.

La cuenta de servicio predeterminada de tu proyecto requiere acceso al bucket de Cloud Storage que se usa en una operación de importación o exportación. Si tu depósito de Cloud Storage está en el mismo proyecto que tu base de datos en modo Datastore, la cuenta de servicio predeterminada tiene acceso al depósito de forma predeterminada.

Si el bucket de Cloud Storage está en otro proyecto, debes darle a la cuenta de servicio predeterminada acceso al bucket de Cloud Storage.

Asigna funciones a la cuenta de servicio predeterminada

Puedes usar la herramienta de línea de comandos gsutil para asignar una de las funciones que se encuentran a continuación. Por ejemplo, para asignar la función de administrador de almacenamiento a la cuenta de servicio predeterminada, ejecuta el siguiente comando:

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

Como alternativa, puedes asignar esta función mediante Cloud Console.

Operaciones de exportación

Para las operaciones de exportación que involucran un depósito en otro proyecto, debes modificar los permisos del depósito para asignar una de las siguientes funciones de Cloud Storage a la cuenta de servicio predeterminada del proyecto que contiene tu base de datos en modo Datastore:

  • Administrador de almacenamiento
  • Administrador de objeto de almacenamiento
  • Escritor de depósitos heredados de Storage

También puedes crear una función personalizada de IAM con permisos ligeramente diferentes a los que se incluyen en las funciones anteriores:

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

Operaciones de importación

Para las operaciones de importación que involucran un depósito de Cloud Storage en otro proyecto, debes modificar los permisos del depósito para asignar una de las siguientes funciones de Cloud Storage a la cuenta de servicio predeterminada del proyecto que contiene tu base de datos en modo Datastore:

  • Administrador de almacenamiento
  • Visualizador de objetos de almacenamiento y Lector de depósitos heredados de almacenamiento

También puedes crear una función personalizada de IAM con los siguientes permisos:

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

Cuenta de servicio predeterminada inhabilitada o borrada

Si inhabilitas o borras la cuenta de servicio predeterminada de App Engine, tu app de App Engine perderá el acceso a la base de datos en modo Datastore. Si inhabilitaste tu cuenta de servicio de App Engine, puedes volver a habilitarla. Consulta cómo habilitar una cuenta de servicio. Si borraste tu cuenta de servicio de App Engine en los últimos 30 días, puedes restablecer tu cuenta de servicio; consulta cómo recuperar una cuenta de servicio.

Diferencias con las copias de seguridad del administrador de Datastore

Si alguna vez usaste la Consola del administrador de Datastore para realizar copias de seguridad, notarás las siguientes diferencias:

  • Las exportaciones que crea una exportación administrada no aparecen en la Consola del administrador de Datastore. Las importaciones y exportaciones administradas son un servicio nuevo que no comparte datos con la funcionalidad de copia de seguridad y restablecimiento de App Engine, que se administra a través de Cloud Console.

  • El servicio administrado de importación y exportación no es compatible con los mismos metadatos que la copia de seguridad de administrador de Datastore y no almacena el estado de progreso en la base de datos. Consulta Administra operaciones de larga duración para obtener más información sobre cómo revisar el progreso de las operaciones de importación y exportación.

  • No puedes ver los registros de servicio de las operaciones administradas de importación y exportación.

  • El servicio administrado de importación tiene retrocompatibilidad con los archivos de copias de seguridad de administrador de Datastore. Puedes importar un archivo de copia de seguridad de administrador de Datastore con el servicio administrado de importación, pero no puedes importar el resultado de una exportación administrada mediante la Consola del administrador de Datastore.

Registros de auditoría

Firestore en modo Datastore escribe registros de auditoría de actividad del administrador para registros de auditoría de Cloud. Los registros de auditoría de la actividad del administrador incluyen operaciones de indexación, importación y exportación. Para ver los registros de auditoría de actividad del administrador de tu base de datos en modo Datastore, consulta Visualiza los registros de auditoría.

Los registros de auditoría de actividad del administrador en modo Datastore aparecen en los tipos de recursos Cloud Datastore Database y Cloud Datastore Index. Los registros de actividad del administrador de Firestore y Datastore aparecen en estos tipos de recursos. Firestore en modo Datastore registra las siguientes operaciones:

Categoría de registros de auditoría Operaciones del modo Datastore
Actividad del administrador DatastoreAdmin.CreateIndex
DatastoreAdmin.DeleteIndex
DatastoreAdmin.ExportEntities
DatastoreAdmin.GetIndex
DatastoreAdmin.ImportEntities
DatastoreAdmin.ListIndexes

Importa a BigQuery

Para importar datos de una exportación administrada a BigQuery, consulta Carga datos del servicio de exportación de Datastore.

Los datos que se exportan sin especificar un filtro de entidad no pueden cargarse en BigQuery. Si quieres importar datos a BigQuery, tu solicitud de exportación debe incluir uno o más nombres de categorías en el filtro de entidad.

Límite de columnas de BigQuery

BigQuery impone un límite de 10,000 columnas por tabla. Las operaciones de exportación generan un esquema de tabla de BigQuery para cada tipo. En este esquema, cada propiedad única dentro de las entidades de un tipo se convierte en una columna.

Si el esquema de BigQuery de un tipo supera las 10,000 columnas, la operación de exportación intenta mantenerse por debajo del límite de columnas. Para ello, trata las entidades incorporadas como BLOB. Si esta conversión reduce el número de columnas en el esquema a menos de 10,000, puedes cargar los datos en BigQuery, pero no puedes consultar las propiedades de las entidades incorporadas. Si la cantidad de columnas aún supera las 10,000, la operación de exportación no genera un esquema de BigQuery para el tipo y no se pueden cargar sus datos en BigQuery.