Como exportar e importar entidades

Nesta página, descrevemos como exportar e importar as entidades do Firestore em modo Datastore usando o serviço de exportação e importação gerenciado. O serviço de exportação e importação gerenciadas está disponível por meio do Console do Cloud, da ferramenta de linha de comando gcloud e da API Datastore Admin (REST, RPC).

Com o serviço de exportação e importação gerenciado, é possível recuperar exclusões acidentais de dados e exportá-los para o processamento off-line. Você pode exportar todas as entidades ou apenas tipos específicos delas. Da mesma maneira, você pode importar todos os dados de uma exportação ou apenas tipos específicos. Considere estes fatores à medida que usa o serviço de exportação e importação gerenciado:

  • O serviço de exportação usa leituras com consistência posterior. Não presuma que uma exportação acontece em um único momento. A exportação pode incluir entidades gravadas após a exportação e excluir entidades gravadas antes de a exportação começar.

  • Uma exportação não contém índice. Quando você importa dados, os índices necessários são recriados automaticamente usando as definições de índice atuais do banco de dados. As configurações de índice com valor da propriedade por entidade são exportadas e seguidas durante a importação.

  • As importações não atribuem novos IDs às entidades. As importações usam os IDs que existiam no momento da exportação e substituem qualquer entidade atual com o mesmo ID. Durante uma importação, os IDs são reservados enquanto as entidades estão sendo importadas. Esse recurso evita conflitos de IDs com novas entidades se as gravações estiverem ativadas enquanto uma importação é executada.

  • Quando uma entidade no banco de dados não for afetada por uma importação, ela permanecerá lá após esse processo.

  • Os dados exportados de um banco de dados do modo Datastore podem ser importados para outro banco de dados do modo Datastore, mesmo que ele esteja em outro projeto.

  • O serviço de exportação e importação gerenciado limita o número de exportações e importações simultâneas a 50 e permite um máximo de 20 solicitações de exportação e importação por minuto para um projeto. Para cada solicitação, o serviço limita o número de combinações de filtros de entidade a 100.

  • A saída de uma exportação gerenciada usa o formato de registro LevelDB.

  • Para importar apenas um subconjunto de entidades ou importar dados para o BigQuery, especifique um filtro de entidade na exportação.

Antes de começar

Antes de usar o serviço de exportação e importação gerenciado, você precisa completar as tarefas a seguir.

  1. Ative o faturamento para seu projeto do Google Cloud. Só é permitido que projetos do Google Cloud com faturamento ativado usem a funcionalidade de exportação e importação.

  2. Crie um bucket do Cloud Storage no mesmo local que seu banco de dados do Firestore em modo Datastore. Não é possível usar um bucket de pagamentos do solicitante para operações de exportação e importação.

  3. Atribua um papel de IAM à sua conta de usuário que conceda a permissão datastore.databases.export, se você estiver exportando dados, ou a permissão datastore.databases.import, se estiver importando dados. O papel Datastore Import Export Admin, por exemplo, concede as duas permissões.

  4. Se o bucket do Cloud Storage estiver em outro projeto, permita que a conta de serviços padrão do projeto acesse o bucket.

Configurar gcloud para seu projeto

Se você planeja usar gcloud para iniciar suas operações de importação e exportação, configure gcloud e conecte-se a seu projeto de uma das seguintes maneiras:

Como iniciar operações de exportação e importação gerenciadas

Nesta seção, descrevemos como iniciar uma operação de exportação ou importação gerenciada.

Como exportar todas as entidades

Console

  1. Acesse a página Exportação de entidades do Datastore no Console do Google Cloud.

    Acessar a página "Exportação do Datastore"

  2. Defina o campo Namespace como All Namespaces e defina o campo Tipo como All Kinds.

  3. Abaixo de Destino, insira o nome do seu bucket do Cloud Storage.

  4. Clique em Exportar.

O console abre a página Entidades e informa o sucesso ou a falha de sua solicitação de exportação gerenciada.

O console também mostra um botão Exibir status. Clique nesse botão para abrir um terminal do Cloud Shell que já foi preenchido com o comando gcloud necessário para ver o status da operação.

Execute este comando sempre que quiser visualizar o status da operação.

gcloud

Use o comando gcloud datastore export para exportar todas as entidades em seu banco de dados.

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

em que bucket-name é o nome do bucket do Cloud Storage e um prefixo opcional, por exemplo, bucket-name/firestore-exports/export-name. Não é possível reutilizar o mesmo prefixo para outra operação de exportação. Se você não fornecer um prefixo de arquivo, o serviço de exportação gerenciada criará um com base no horário atual.

Use a sinalização --async para evitar que gcloud aguarde a conclusão da operação. Se você omitir a sinalização --async, digite Ctrl+c para não aguardar uma operação. Isso não cancelará a operação.

rest

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto.
  • bucket-name: nome do bucket do Cloud Storage

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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"
  }
}
A resposta é uma operação de longa duração, passível de ser verificada para ver se foi completa.

Como exportar tipos ou namespaces específicos

Para exportar um subconjunto específico de tipos e/ou namespaces, forneça um filtro de entidade com valores para tipos e IDs de namespace. Cada solicitação é limitada a 100 combinações de filtros de entidade, em que cada combinação de tipo e namespace filtrado conta como um filtro separado para esse limite.

Console

No console, é possível selecionar todos os tipos ou um tipo específico. Da mesma forma, é possível selecionar todos os namespaces ou um namespace específico.

Para especificar uma lista de namespaces e tipos a serem exportados, use gcloud.

  1. Vá para a página Exportação do Datastore no Console do Google Cloud.

    Acessar a página "Exportação do Datastore"

  2. Defina o campo Namespace como All Namespaces ou o nome de um dos seus namespaces.

  3. Defina o campo Tipo como All Kinds ou como o nome de um tipo.

  4. Em Destino, insira o nome do bucket do Cloud Storage.

  5. Clique em Exportar.

O console abre a página Entidades e informa o sucesso ou a falha de sua solicitação de exportação gerenciada.

O console também mostra um botão Exibir status. Clique nesse botão para abrir um terminal do Cloud Shell que já foi preenchido com o comando gcloud necessário para ver o status da operação.

Execute este comando sempre que quiser visualizar o status da operação.

gcloud

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

em que bucket-name é o nome do bucket do Cloud Storage e um prefixo opcional, por exemplo, bucket-name/firestore-exports/export-name. Não é possível reutilizar o mesmo prefixo para outra operação de exportação. Se você não fornecer um prefixo de arquivo, o serviço de exportação gerenciada criará um com base no horário atual.

Use a sinalização --async para evitar que gcloud aguarde a conclusão da operação. Se você omitir a sinalização --async, digite Ctrl+c para não aguardar uma operação. Isso não cancelará a operação.

rest

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto.
  • bucket-name: nome do bucket do Cloud Storage
  • kind: o tipo de entidade
  • namespace: o ID do namespace (use "" para o ID de namespace padrão)

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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"
  }
}
A resposta é uma operação de longa duração, passível de ser verificada para ver se foi completa.

Arquivos de metadados

Uma operação de exportação cria um arquivo de metadados para cada par namespace-tipo especificado. Os arquivos de metadados geralmente são denominados NAMESPACE_NAME_KIND_NAME.export_metadata. No entanto, se um namespace ou tipo criar um nome de objeto do Cloud Storage inválido, o arquivo será nomeado como export[NUM].export_metadata.

Os arquivos de metadados são buffers de protocolo e podem ser decodificados com o compilador de protocolo protoc. Por exemplo, é possível decodificar um arquivo de metadados para determinar o namespace e os tipos que os arquivos de exportação contêm:

protoc --decode_raw < export0.export_metadata

Como importar todas as entidades

Console

  1. Vá para a página Importação do Datastore no Console do Google Cloud.

    Acessar a página "Importação do Datastore"

  2. No campo File, clique em Procurar e selecione um arquivo overall_export_metadata.

  3. Defina o campo Namespace como All Namespaces e defina o campo Tipo como All Kinds.

  4. Clique em Importar.

O console abre a página Entidades e informa o sucesso ou a falha de sua solicitação de importação gerenciada.

O console também mostra um botão Exibir status. Clique nesse botão para abrir um terminal do Cloud Shell que já foi preenchido com o comando gcloud necessário para ver o status da operação.

Execute este comando sempre que quiser visualizar o status da operação.

gcloud

Use o comando gcloud datastore import para importar todas as entidades que foram exportadas anteriormente com o serviço de exportação gerenciada.

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

em que bucket-name/file-path/file-name é o caminho para o arquivo overall_export_metadata no bucket do Cloud Storage.

Use a sinalização --async para evitar que gcloud aguarde a conclusão da operação. Se você omitir a sinalização --async, digite Ctrl+c para não aguardar uma operação. Isso não cancelará a operação.

rest

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto.
  • bucket-name: nome do bucket do Cloud Storage
  • object-name: nome do objeto do Cloud Storage (exemplo: 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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"
  }
}
A resposta é uma operação de longa duração, passível de ser verificada para ver se foi completa.

Como localizar seu arquivo overall_export_metadata

É possível determinar o valor a ser usado para o local de importação usando o navegador do Cloud Storage no Console do Google Cloud:

Abrir o navegador do Cloud Storage

Também é possível listar e descrever as operações concluídas. O campo outputURL mostra o nome do arquivo overall_export_metadata:

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

Como importar tipos ou namespaces específicos

Para importar um subconjunto específico de tipos e/ou namespaces, forneça um filtro de entidade com valores para tipos e IDs de namespace.

Só será possível especificar tipos e namespaces se os arquivos de exportação tiverem sido criados com o uso de um filtro de entidade. Não é possível importar um subconjunto de tipos e namespaces de uma exportação de todas as entidades.

Console

No console, é possível selecionar todos os tipos ou um tipo específico. Da mesma forma, é possível selecionar todos os namespaces ou um namespace específico.

Para especificar uma lista de namespaces e tipos a serem importados, use gcloud.

  1. Vá para a página Importação do Datastore no Console do Google Cloud.

    Acessar a página "Importação do Datastore"

  2. No campo File, clique em Procurar e selecione um arquivo overall_export_metadata.

  3. Defina o campo Namespace como All Namespaces ou como um namespace específico.

  4. Defina o campo Tipo como All Kinds ou como um tipo específico.

  5. Clique em Importar.

O console abre a página Entidades e informa o sucesso ou a falha de sua solicitação de importação gerenciada.

O console também mostra um botão Exibir status. Clique nesse botão para abrir um terminal do Cloud Shell que já foi preenchido com o comando gcloud necessário para ver o status da operação.

Execute este comando sempre que quiser visualizar o status da operação.

gcloud

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

em que bucket-name/file-path/file-name é o caminho para o arquivo overall_export_metadata no bucket do Cloud Storage.

Use a sinalização --async para evitar que gcloud aguarde a conclusão da operação. Se você omitir a sinalização --async, digite Ctrl+c para não aguardar uma operação. Isso não cancelará a operação.

rest

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto.
  • bucket-name: nome do bucket do Cloud Storage
  • object-name: nome do objeto do Cloud Storage (exemplo: 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata
  • kind: o tipo de entidade
  • namespace: o ID do namespace (use "" para o ID de namespace padrão)

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "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"
  }
}
A resposta é uma operação de longa duração, passível de ser verificada para ver se foi completa.

Importar transformações

Uma operação de importação atualiza chaves de entidade e propriedades de referência de chave nos dados de importação com o código do projeto de destino. Se essa atualização aumentar seus tamanhos de entidade, é possível que se causem erros de "entidade muito grande" ou "entradas de índice muito grandes" para operações de importação.

Para evitar erros, importe para um projeto de destino com um ID de projeto mais curto.

Como gerenciar operações de longa duração

As operações de importação e exportação gerenciadas são operações de longa duração. Essas chamadas de método podem levar um tempo significativo para serem concluídas.

Depois de iniciar uma operação de exportação ou importação, o modo Datastore atribui à operação um nome exclusivo. Use esse nome para excluir, cancelar ou verificar a operação.

Os nomes das operações são prefixados com projects/[PROJECT_ID]/databases/(default)/operations/, por exemplo:

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

No entanto, é possível omitir o prefixo ao especificar um nome de operação para os comandos describe, cancel e delete.

Como listar todas as operações de longa duração

Para listar operações de longa duração, use o comando gcloud datastore operations list. Esse comando lista as operações contínuas e as concluídas recentemente. As operações são listadas por alguns dias após a conclusão:

gcloud

gcloud datastore operations list

rest

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: ID do projeto

Método HTTP e URL:

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

Para enviar a solicitação, expanda uma destas opções:

Veja informações sobre a resposta abaixo.

Por exemplo, uma operação de exportação concluída recentemente mostra as seguintes informações:

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

Como descrever uma única operação

Em vez de listar todas as operações de longa duração, é possível listar os detalhes de uma única operação:

gcloud

Use o comando operations describe para mostrar o status de uma operação de exportação ou importação.

gcloud datastore operations describe operation-name

rest

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • project-id: o ID do projeto.
  • operation-name: o nome da operação

Método HTTP e URL:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

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

Como estimar o tempo de conclusão

Conforme sua operação é executada, consulte o valor do campo state para o status geral da operação.

Uma solicitação para o status de uma operação de longa duração também retorna as métricas workEstimated e workCompleted. Cada uma dessas métricas é retornada no número de bytes e no número de entidades: workEstimated mostra o número total estimado de bytes e entidades que uma operação processará, com base em estatísticas do banco de dados. workCompleted mostra o número de bytes e entidades processados até o momento. Após a conclusão da operação, workCompleted reflete o número total de bytes e entidades que foram realmente processados, o que pode ser maior do que o valor de workEstimated.

Divida workCompleted por workEstimated para ter uma estimativa aproximada do andamento. A estimativa pode ser imprecisa porque depende da coleção de estatísticas em atraso.

Por exemplo, veja o status do andamento de uma operação de exportação:

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

Quando uma operação for concluída, a descrição da operação conterá "done": true. Veja o valor do campo state para o resultado da operação. Se o campo done não for definido na resposta, seu valor será false. Não dependa da existência do valor done para operações em andamento.

Cancelar uma operação

Use o comando operations cancel para interromper uma operação em andamento:

gcloud datastore operations cancel operation-name

Se você cancelar uma operação em execução, ela não será desfeita. Uma operação de exportação cancelada deixa documentos já exportados no Cloud Storage, e uma operação de importação cancelada deixa implantadas atualizações já feitas em seu banco de dados. Não é possível importar uma exportação parcialmente concluída.

Excluir uma operação

Use o comando operations delete para remover uma operação da saída de operations list. Ele não excluirá arquivos de exportação do Cloud Storage.

gcloud datastore operations delete operation-name

Faturamento e preços para exportações e importações gerenciadas

É necessário ativar o faturamento para o projeto do Google Cloud antes de você usar o serviço de exportação e importação gerenciadas. As operações de exportação e importação influenciam seus custos do Google Cloud das seguintes maneiras:

Os custos das operações de exportação e importação não contam para o limite de gastos do App Engine. As operações de exportação ou importação só acionarão alertas de orçamento do Google Cloud após a conclusão. Da mesma forma, as leituras e gravações executadas durante uma operação de exportação ou importação são aplicadas na sua cota diária apenas após a conclusão.

Permissões

Para executar operações de exportação e importação, sua conta de usuário e a conta de serviço padrão do seu projeto exigem as permissões do Cloud Identity and Access Management descritas abaixo.

Permissões da conta de usuário

A conta de usuário ou a conta de serviço que iniciou a operação requer as permissões datastore.databases.export e datastore.databases.import do Cloud IAM. Se você é o proprietário do projeto, isso significa que sua conta tem as permissões necessárias. Caso contrário, os seguintes papéis do Cloud IAM concedem as permissões necessárias:

  • Proprietário do Datastore
  • Administrador de importação e exportação do Datastore

É possível que um proprietário de projeto conceda essas funções seguindo as instruções disponíveis na página Como conceder acesso.

Permissões da conta de serviço padrão

Cada projeto do Google Cloud cria automaticamente uma conta de serviço padrão chamada PROJECT_ID@appspot.gserviceaccount.com. As operações de exportação e importação usam essa conta de serviço para autorizar operações do Cloud Storage.

A conta de serviço padrão do seu projeto requer acesso ao bucket do Cloud Storage usado em uma operação de exportação ou importação. Se o bucket do Cloud Storage estiver no mesmo projeto que o banco de dados do modo Datastore, a conta de serviço padrão terá acesso ao bucket por padrão.

Se o bucket do Cloud Storage estiver em outro projeto, será necessário permitir que a conta de serviço padrão acesse o bucket.

Como atribuir papéis à conta de serviço padrão

Use a ferramenta de linha de comando gsutil para atribuir um dos papéis abaixo. Por exemplo, para atribuir a função de administrador do Storage à conta de serviço padrão, execute:

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

Como alternativa, é possível atribuir este papel usando o Console do Cloud.

Operações de exportação

Para operações de exportação que envolvem um bucket em outro projeto, modifique as permissões do bucket para atribuir um dos seguintes papéis do Cloud Storage à conta de serviço padrão do projeto que contém o banco de dados do modo Datastore:

  • Administrador do Storage
  • Administrador de objetos do Storage
  • Gravador de bucket legado do Storage

Também é possível criar um papel personalizado do IAM com as seguintes permissões:

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

Operações de importação

Para operações de importação que envolvem um bucket do Cloud Storage em outro projeto, modifique as permissões do bucket para atribuir um dos seguintes papéis do Cloud Storage à conta de serviço padrão do projeto que contém o banco de dados do modo Datastore:

  • Administrador do Storage
  • Leitor de objetos Storage e leitor de bucket legado do Storage

Também é possível criar um papel personalizado do IAM com as seguintes permissões:

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

Diferenças entre os backups do Datastore Admin

Se você já usou o Datastore Admin Console para backups, observe as seguintes diferenças:

  • As exportações criadas por uma exportação gerenciada não aparecem no Datastore Admin Console. As exportações e importações gerenciadas são um novo serviço que não compartilha dados com a funcionalidade de backup e restauração do App Engine, que é administrada por meio do Console do Cloud.

  • O serviço de exportação e importação gerenciadas não aceita os mesmos metadados que o backup de administração do Datastore e não armazena o status de andamento no banco de dados. Para informações sobre como verificar o andamento das operações de exportação e importação, consulte Como gerenciar operações de longa duração

  • Não é possível visualizar os registros de serviço de operações de exportação e importação gerenciadas.

  • O serviço de importação gerenciada é compatível com versões anteriores dos arquivos de backup do Datastore Admin. É possível importar um arquivo de backup Datastore Admin usando o serviço de importação gerenciada, mas não é possível importar a saída de uma exportação gerenciada usando o Datastore Admin Console.

Registros de auditoria

O Firestore no modo Datastore grava registros de auditoria de atividade do administrador para registros de auditoria do Cloud. Os registros de auditoria de atividade do administrador incluem operações de exportação, operações de importação e operações de indexação. Para ver os registros de auditoria de atividade do administrador do banco de dados do modo Datastore, consulte Como visualizar registros de auditoria.

Os registros de auditoria de atividade do administrador do modo Datastore aparecem nos tipos de recurso Cloud Datastore Database e Cloud Datastore Index. Os registros de atividade do administrador do Firestore e do Datastore aparecem nesses tipos de recursos. O Firestore no modo Datastore registra as seguintes operações:

Categoria de registro de auditoria Operações do modo Datastore
Atividade do administrador DatastoreAdmin.CreateIndex
DatastoreAdmin.DeleteIndex
DatastoreAdmin.ExportEntities
DatastoreAdmin.GetIndex
DatastoreAdmin.ImportEntities
DatastoreAdmin.ListIndexes

Como importar para o BigQuery

Para importar dados de uma exportação gerenciada para o BigQuery, consulte Como carregar dados do serviço de exportação do Datastore.

Não é possível carregar no BigQuery os dados exportados sem a especificação de um filtro de entidade. Para importar dados para o BigQuery, a solicitação de exportação precisa incluir um ou mais nomes de tipo no filtro de entidade.

Limite de colunas do BigQuery

O BigQuery impõe um limite de 10 mil colunas por tabela. As operações de exportação geram um esquema de tabela do BigQuery para cada tipo. Nesse esquema, cada propriedade exclusiva dentro das entidades de um tipo se torna uma coluna de esquema.

Se um esquema de BigQuery de um tipo ultrapassar 10 mil colunas, a operação de exportação tentará permanecer abaixo do limite de coluna tratando entidades incorporadas como blobs. Se essa conversão elevar o número de colunas no esquema para 10 mil, será possível carregar os dados no BigQuery, mas não será possível consultar as propriedades em entidades incorporadas. Se o número de colunas ainda exceder 10 mil, a operação de exportação não gerará um esquema do BigQuery para o tipo e não será possível carregar seus dados no BigQuery.