Daten einfügen und Bulk-Datenvorgänge ausführen

In Firebase Data Connect werden Bulk-Datenvorgänge mit der folgenden Methode ausgeführt: Mutationen. Auch wenn Ihre Data Connect-Projekte Daten in PostgreSQL können Sie keine Daten im Bulk mit SQL-Anweisungen oder SQL-Tools laden: Der Data Connect-Dienst und seine Schemas müssen mit Ihrem und direkt in PostgreSQL arbeiten würde, würde diese Synchronisierung zerstört werden.

Aus diesem Grund bietet Data Connect die standardmäßige _insertMany, Mutationen _upsertMany und _deleteMany für Seeding-Daten und Bulk-Daten zu verstehen.

Wenn Sie Prototyping für Anwendungen erstellen und CI/CD-Abläufe ausführen, können diese Mutationen in einer lokalen Entwicklungsumgebung mit der VS Code-Erweiterung aufgerufen, Data Connect-Emulator und (optional) eine lokale Datenbankinstanz.

Seed-Daten in lokalen und Produktionsinstanzen

Im Einstiegsleitfaden haben Sie eine App eingerichtet, um einer einzelnen Tabelle mithilfe einer Ad-hoc-Insert-Mutation einen einzelnen Datensatz hinzuzufügen.

Damit die Filmbewertungs-App nutzbar ist, benötigt sie Daten zu Filmen, Rezensionen und Nutzern für Prototyping-Abfragen und ‑Mutationen, die Joins und andere Vorgänge auf mehreren Tabellen mit realistischen Daten verwenden. Sie können Ihr Schema erweitern und Datenbank.

Ihre Prototyping-Umgebung benötigt Code, um Daten zu erzeugen. Dieser Leitfaden finden Sie einige Beispiele:

  • Verwendung von _insertMany und _upsertMany für einzelne Tabellen
  • Verwendung von _insertMany in verbundenen Tabellen

Schema der App für Filmrezensionen aktualisieren

Mithilfe von _insertMany- und _upsertMany-Mutationen können Sie einzelne Datenbanktabellen einzeln oder mehrere Tabellen aktualisieren, die durch Join-Beziehungen miteinander verknüpft sind. Unten sehen Sie ein erweitertes Schema für eine Filmbewertungs-App, das diese Anwendungsfälle und Beispiele veranschaulicht. Er erweitert schema.gql über den ursprünglichen Movie-Typ hinaus auf die Typen Actor und MovieActor, damit wir Prototypen für komplexere Abfragen erstellen können.

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

Mutationen in Seed-Null-Zustandsdaten schreiben

Wenn Ihre Abfragen und Mutationen während des Prototypings anhand einer Reihe von diskreten Werten getestet werden müssen, können Sie die Daten mit mehreren Einträgen füllen. Für können Sie z. B. mehrere Filmdatensätze mit verschiedenen Genres und Bewertungen zum Testen und Filtern.

Seed-Daten in die Tabellen Movie und Actor einfügen

Je nach Phase des Prototyping können Sie dieselbe Methode verwenden, die im Leitfaden „Einstieg“ beschrieben wurde, um ein oder zwei Einträge einzufügen. Sie können also Code Lenses in der VS Code-Erweiterung verwenden, um _insertMutationen zu erstellen, Daten zu hartcodieren und diese Mutationen in VS Code auszuführen.

Es ist jedoch sinnvoller, viele Datensätze mit einem _insertMany-Vorgang in eine Tabelle einzufügen. Im Beispiel für die Filmrezensions-App wird dadurch ein erster Datensatz in Movie und Actor eingefügt.

Führen Sie die folgenden Mutationen mit der VS Code Firebase-Erweiterung in Öffnen Sie die entsprechende Dateieditoransicht, klicken Sie auf Run (Production) oder Run (Local) für CodeLens, je nachdem, ob Sie für ein Prototyping mit in Ihrem Produktionsdienst oder in einer lokalen Datenbank.

# 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"
    }
   ])
}

Daten in die MovieActor-Join-Tabelle einfügen

Wenn Sie Abfragen und Mutationen mit Joins und anderen komplexen Vorgängen testen möchten, können Sie der Tabelle MovieActor mehrere Datensätze hinzufügen.

Wenn Sie mehrere Tabellen in dieser Art von Beziehung aktualisieren, können Sie die Anweisung @transaction hinzufügen, damit die Aktualisierung ordnungsgemäß abgeschlossen wird.

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

Mutation zum Zurücksetzen der Startdaten schreiben

Beim Erstellen von Prototypen und beim Ausführen von CI/CD kann es nützlich sein, die Daten auf den Nullzustand zurückzusetzen, um eine neue Reihe von Tests mit neuen Daten auszuführen.

Wenn Ihr Prototypcode Ihren Tabellen keine Datensätze hinzufügt, verwenden Sie dazu die Methode Die Mutation _upsertMany wurde von Data Connect bereitgestellt.

Im folgenden Beispiel wird movie_upsertMany mit den Anfangswerten aufgerufen , um Filmdatensätze auf ihren ursprünglichen Zustand zu aktualisieren.

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",
    }
   …
}

Nächste Schritte