Modelo de eliminação em massa do Firestore

O modelo de eliminação em massa do Firestore é um pipeline que lê entidades do Firestore com uma determinada consulta GQL e, em seguida, elimina todas as entidades correspondentes no projeto de destino selecionado. O pipeline pode, opcionalmente, transmitir as entidades do Firestore codificadas em JSON para a UDF de JavaScript, que pode usar para filtrar entidades devolvendo valores nulos.

Requisitos do pipeline

  • O Firestore tem de ser configurado no projeto antes de executar o modelo.
  • Se estiver a ler e a eliminar a partir de instâncias separadas do Firestore, a conta de serviço do trabalhador do Dataflow tem de ter autorização para ler a partir de uma instância e eliminar a partir da outra.
  • As escritas na base de dados têm de estar ativadas na instância do Firestore.

Parâmetros de modelos

Parâmetro Descrição
firestoreReadGqlQuery Consulta GQL que especifica as entidades a corresponder para eliminação. A utilização de uma consulta apenas com chaves pode melhorar o desempenho. Por exemplo: "SELECT __key__ FROM MyKind".
firestoreReadProjectId ID do projeto da instância do Firestore a partir da qual quer ler entidades (através da sua consulta GQL) que são usadas para a correspondência.
firestoreDeleteProjectId ID do projeto da instância do Firestore a partir da qual eliminar as entidades correspondentes. Pode ser igual a firestoreReadProjectId se quiser ler e eliminar na mesma instância do Firestore.
firestoreReadNamespace (Opcional) Espaço de nomes das entidades pedidas. Defina como "" para o espaço de nomes predefinido.
firestoreHintNumWorkers (Opcional) Sugestão para o número esperado de trabalhadores no passo de limitação do aumento gradual do Firestore. A predefinição é 500.
javascriptTextTransformGcsPath (Opcional) O URI do Cloud Storage do ficheiro .js que define a função definida pelo utilizador (FDU) JavaScript que quer usar. Por exemplo, gs://my-bucket/my-udfs/my_file.js.
javascriptTextTransformFunctionName (Opcional) O nome da função definida pelo utilizador (FDU) do JavaScript que quer usar. Por exemplo, se o código da função JavaScript for myTransform(inJson) { /*...do stuff...*/ }, o nome da função é myTransform. Para ver exemplos de UDFs JavaScript, consulte os exemplos de UDFs. Se esta função devolver um valor indefinido ou nulo para uma determinada entidade do Firestore, essa entidade não é eliminada.

Função definida pelo utilizador

Opcionalmente, pode estender este modelo escrevendo uma função definida pelo utilizador (FDU). O modelo chama a FDU para cada elemento de entrada. Os payloads dos elementos são serializados como strings JSON. Para mais informações, consulte o artigo Crie funções definidas pelo utilizador para modelos do Dataflow.

Especificação da função

A FDU tem a seguinte especificação:

  • Entrada: uma entidade do Firestore, serializada como uma string JSON.
  • Output: se quiser manter a entidade e não a eliminar, devolva null ou undefined. Caso contrário, devolva a entidade original para eliminação.

Execute o modelo

Consola

  1. Aceda à página do fluxo de dados Criar tarefa a partir de um modelo.
  2. Aceda a Criar tarefa a partir de modelo
  3. No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
  4. Opcional: para Ponto final regional, selecione um valor no menu pendente. A região predefinida é us-central1.

    Para ver uma lista das regiões onde pode executar uma tarefa do Dataflow, consulte as localizações do Dataflow.

  5. No menu pendente Modelo do fluxo de dados, selecione the Bulk Delete Entities in Firestore template.
  6. Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
  7. Clique em Executar tarefa.

gcloud

Na 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 o seguinte:

  • JOB_NAME: um nome de tarefa exclusivo à sua escolha
  • REGION_NAME: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • GQL_QUERY: a consulta que vai usar para fazer corresponder entidades para eliminação
  • FIRESTORE_READ_AND_DELETE_PROJECT_ID: o ID do projeto da instância do Firestore. Este exemplo lê e elimina a partir da mesma instância do Firestore.

API

Para executar o modelo através da API REST, envie um pedido HTTP POST. Para mais informações sobre a API e os respetivos âmbitos 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 o seguinte:

  • PROJECT_ID: o ID do projeto onde quer executar a tarefa do Dataflow Google Cloud
  • JOB_NAME: um nome de tarefa exclusivo à sua escolha
  • LOCATION: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • GQL_QUERY: a consulta que vai usar para fazer corresponder entidades para eliminação
  • FIRESTORE_READ_AND_DELETE_PROJECT_ID: o ID do projeto da instância do Firestore. Este exemplo lê e elimina a partir da mesma instância do Firestore.

O que se segue?