Gerar dados e realizar operações de dados em massa

No Firebase Data Connect, as operações de dados em massa são realizadas usando mutações. Embora seus projetos Data Connect armazenem dados no PostgreSQL, não é possível carregar dados em massa usando instruções SQL ou ferramentas SQL: o serviço Data Connect e os esquemas dele precisam ficar sincronizados com o banco de dados, e operar diretamente no PostgreSQL interromperia essa sincronização.

É por isso que Data Connect fornece _insertMany padrão, _upsertMany e _deleteMany para dados de propagação e dados em massa de projetos.

Quando você está criando protótipos de apps e executando fluxos de CI/CD, essas mutações podem ser chamadas em um ambiente de desenvolvimento local usando a extensão do VS Code, o emulador Data Connect e (opcionalmente) uma instância de banco de dados local.

Dados de sugestão em instâncias locais e de produção

No Guia explicativo, você configura um app para adicionar um único registro a uma única tabela usando uma mutação de inserção ad-hoc.

Para ser utilizável, o app de avaliação de filmes precisa de dados de filmes, avaliações e usuários para consultas e mutações de protótipo que usam mesclagens e outras operações em várias tabelas com dados realistas. É possível expandir seu esquema e sugerir no seu banco de dados.

Seu ambiente de prototipagem precisa de código para realizar a propagação de dados. Este guia fornece algumas amostras, ilustrando:

  • Uso de _insertMany e _upsertMany em tabelas individuais
  • Uso de _insertMany em tabelas relacionadas

Atualizar o esquema do app de crítica de filmes

É possível usar mutações _insertMany e _upsertMany para atualizar valores tabelas de banco de dados uma de cada vez ou atualizar várias tabelas relacionadas por mesclagem relacionamentos. Um esquema de app expandido de resenhas de filmes que ajuda a ilustrar essas casos de uso e exemplos abaixo. Ele expande schema.gql além do tipo inicial Movie para incluir os tipos Actor e MovieActor, para que possamos criar protótipos de consultas mais complexas.

# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
  id: UUID!
  imageUrl: String! 
  name: String! @col(name: "name", dataType: "varchar(30)")
}

# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
  # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
  # In this case, @ref(fields: "movieId", references: "id") is implied
  movie: Movie!
  # movieId: UUID! <- this is created by the implied @ref
  actor: Actor!
  # actorId: UUID! <- this is created by the implied @ref
  role: String! # "main" or "supporting"
}

Gravar mutações para gerar dados de estado zero

Durante a prototipagem, quando suas consultas e mutações precisam ser testadas em uma gama de valores discretos, é possível preencher dados com vários registros. Para exemplo, você pode querer adicionar vários registros de filme com diferentes tipos de gêneros e classificações para testar comparações e filtros.

Semente de dados nas tabelas Movie e Actor

Dependendo do seu estágio de prototipagem, você pode usar a mesma técnica apresentada no guia "Começar" para inserir um ou dois registros: ou seja, você pode usar as lentes de código na extensão do VS Code para criar mutações _insert, codificar dados e executar essas mutações no VS Code.

Eventualmente, faz mais sentido adicionar muitos registros em uma tabela usando uma _insertMany. No exemplo de app de análise de filmes, isso insere um conjunto inicial de dados em Movie e Actor.

Para executar as seguintes mutações usando a extensão do Firebase do VS Code, em na visualização apropriada do editor de arquivos, clique no botão Executar (produção) ou Botões Run (Local) do CodeLens, dependendo se você está prototipando com seu serviço de produção ou um banco de dados local.

# insertMany for Movie
# 2 records shown
mutation {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])
}
# insertMany for Actor
# 2 records shown
mutation {
  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
   ])
}

Gerar dados na tabela de mesclagem MovieActor

Para testar consultas e mutações usando junções e outras operações complexas, adicione vários registros à tabela MovieActor.

Aqui, ao atualizar várias tabelas nesse tipo de relação, é possível Adicione a diretiva @transaction para garantir que a atualização seja concluída corretamente.

mutation @transaction {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])

  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
  ])
}

Escrever uma mutação para redefinir dados de semente

Ao criar protótipos e realizar a CI/CD, redefinir os dados para um estado zero para executar uma nova série de testes em um novo conjunto de dados pode ser útil.

Para isso, se o código do protótipo não adicionar registros às tabelas, use o Mutação _upsertMany fornecida por Data Connect.

No exemplo abaixo, movie_upsertMany é chamado com os valores iniciais para atualizar os registros de filmes para o estado original.

mutation {
  # Execute an upsertMany operation to update the Movie table
  movie_upsertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
   …
}

A seguir