Modelo de exclusão em massa do Firestore

O modelo Exclusão em massa do Firestore é um pipeline que lê entidades do Firestore com uma determinada consulta GQL e depois exclui todas as entidades correspondentes no projeto de destino selecionado. Como opção, o pipeline pode passar as entidades do Firestore codificadas por JSON para sua UDF do JavaScript. Use-a para filtrar as entidades retornando valores nulos.

Requisitos de pipeline

  • O Firestore precisa ser configurado no projeto antes de executar o modelo.
  • Em caso de leitura e exclusão de instâncias do Firestore separadas, a Conta de serviço do worker do Dataflow precisa ter permissão para ler de uma instância e excluir da outra.
  • As gravações de banco de dados precisam estar ativadas na instância do Firestore.

Parâmetros do modelo

Parâmetro Descrição
firestoreReadGqlQuery Consulta GQL que especifica quais entidades devem corresponder para exclusão. Usar uma consulta apenas de chaves pode melhorar o desempenho. Por exemplo: "SELECT __key__ FROM MyKind".
firestoreReadProjectId O ID do projeto da instância do Firestore a partir da qual você quer ler entidades (usando sua consulta GQL) que são usadas para correspondência.
firestoreDeleteProjectId O ID do projeto da instância do Firestore a partir da qual as entidades correspondentes serão excluídas. Isso pode ser o mesmo que firestoreReadProjectId se você quiser ler e excluir na mesma instância do Firestore.
firestoreReadNamespace Opcional: namespace das entidades solicitadas. Defina como "" para o namespace padrão.
firestoreHintNumWorkers (Opcional) Dica para o número esperado de workers na etapa de limitação de aumento do Firestore. O padrão é 500.
javascriptTextTransformGcsPath Opcional: O URI do Cloud Storage do arquivo .js que define a função definida pelo usuário (UDF) do JavaScript que você quer usar. Por exemplo, gs://my-bucket/my-udfs/my_file.js.
javascriptTextTransformFunctionName (Opcional) O nome da função definida pelo usuário (UDF) do JavaScript que você quer usar. Por exemplo, se o código de função do JavaScript for myTransform(inJson) { /*...do stuff...*/ }, o nome da função será myTransform. Para amostras de UDFs do JavaScript, consulte os exemplos de UDF. Se essa função retornar um valor indefinido ou nulo para uma determinada entidade do Firestore, a entidade não será excluída.

Função definida pelo usuário

Também é possível estender esse modelo escrevendo uma função definida pelo usuário (UDF). O modelo chama a UDF para cada elemento de entrada. Os payloads dos elementos são serializados como strings JSON. Para mais informações, consulte Criar funções definidas pelo usuário para modelos do Dataflow.

Especificação da função

A UDF tem a seguinte especificação:

  • Entrada: uma entidade do Firestore, serializada como uma string JSON.
  • Saída: se você quiser manter a entidade e não excluí-la, retorne null ou undefined. Caso contrário, retorne a entidade original para exclusão.

Executar o modelo

Console

  1. Acesse a página Criar job usando um modelo do Dataflow.
  2. Acesse Criar job usando um modelo
  3. No campo Nome do job, insira um nome exclusivo.
  4. Opcional: em Endpoint regional, selecione um valor no menu suspenso. A região padrão é us-central1.

    Para ver uma lista de regiões em que é possível executar um job do Dataflow, consulte Locais do Dataflow.

  5. No menu suspenso Modelo do Dataflow, selecione the Bulk Delete Entities in Firestore template.
  6. Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
  7. Cliquem em Executar job.

gcloud

No shell ou no terminal, execute o modelo:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Firestore_to_Firestore_Delete \
    --region REGION_NAME \
    --parameters \
firestoreReadGqlQuery="GQL_QUERY",\
firestoreReadProjectId=FIRESTORE_READ_AND_DELETE_PROJECT_ID,\
firestoreDeleteProjectId=FIRESTORE_READ_AND_DELETE_PROJECT_ID

Substitua:

  • JOB_NAME: um nome de job de sua escolha
  • REGION_NAME: a região onde você quer implantar o job do Dataflow, por exemplo, us-central1
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

  • GQL_QUERY: a consulta que você usará para corresponder entidades para exclusão
  • FIRESTORE_READ_AND_DELETE_PROJECT_ID: o ID do projeto da instância do Firestore. Este exemplo lê e exclui da mesma instância do Firestore.

API

Para executar o modelo usando a API REST, envie uma solicitação HTTP POST. Para mais informações sobre a API e os respectivos escopos de autorização, consulte projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Firestore_to_Firestore_Delete
{
   "jobName": "JOB_NAME",
   "parameters": {
       "firestoreReadGqlQuery": "GQL_QUERY",
       "firestoreReadProjectId": "FIRESTORE_READ_AND_DELETE_PROJECT_ID",
       "firestoreDeleteProjectId": "FIRESTORE_READ_AND_DELETE_PROJECT_ID"
   },
   "environment": { "zone": "us-central1-f" }
}

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud em que você quer executar o job do Dataflow
  • JOB_NAME: um nome de job de sua escolha
  • LOCATION: a região onde você quer implantar o job do Dataflow, por exemplo, us-central1
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

  • GQL_QUERY: a consulta que você usará para corresponder entidades para exclusão
  • FIRESTORE_READ_AND_DELETE_PROJECT_ID: o ID do projeto da instância do Firestore. Este exemplo lê e exclui da mesma instância do Firestore.

A seguir