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

In Firebase Data Connect, können Sie je nach Workflow und Umgebung auf verschiedene Arten Bulk-Daten laden und aktualisieren:

  • Beim lokalen Prototyping , wenn Sie alternative Schemas testen, können Sie Daten Seeding-Mutationen in einer lokalen Entwicklungsumgebung mit der Data Connect VS Code-Erweiterung, dem Data Connect Emulator und einer lokalen Datenbankinstanz erstellen und aufrufen.

  • Bei der Produktionsentwicklung mit einem stabilen Schema, wenn Sie größere CI/CD-Abläufe ausführen und Produktionsdaten verwalten, haben Sie zwei Möglichkeiten:

    • Die bevorzugte Methode ist die Verwendung des Firebase Admin SDK, einer Reihe von Bibliotheken , die in privilegierten Umgebungen ausgeführt werden.

    • Sie können auch SQL-Tools mit Ihrer Cloud SQL-Instanz verwenden, um Bulk-Ladevorgänge und ‑Aktualisierungen auszuführen, solange Sie Daten und nicht Ihr Datenbankschema ändern. Wenn Sie Ihr Datenbankschema direkt mit SQL-Tools ändern, kann dies zu Problemen mit Ihrem Data Connect Schema und Ihren Connectors führen.

Lokales Prototyping: Daten in lokale Instanzen einfügen

Im Leitfaden Erste Schritte haben Sie eine App eingerichtet, um mit einer Ad-hoc-Einfügemutation einen einzelnen Datensatz zu einer einzelnen Tabelle hinzuzufügen.

Damit die App für Filmkritiken verwendet werden kann, sind Daten für Filme, Kritiken und Nutzer erforderlich, um Abfragen und Mutationen zu prototypisieren, die Verknüpfungen und andere Vorgänge für mehrere Tabellen mit realistischen Daten verwenden. Sie können Ihr Schema erweitern und Ihre Datenbank mit Daten füllen.

Für Ihre Prototyping-Umgebung ist Code erforderlich, um Daten einzufügen. Dieser Leitfaden enthält einige Beispiele, die Folgendes veranschaulichen:

  • Verwendung von _insertMany und _upsertMany für einzelne Tabellen
  • Verwendung von _insertMany für verknüpfte Tabellen

Schema der App für Filmkritiken aktualisieren

Sie können _insertMany- und _upsertMany-Mutationen verwenden, um einzelne Datenbanktabellen einzeln zu aktualisieren oder mehrere Tabellen zu aktualisieren, die durch Verknüpfungsbeziehungen verknüpft sind. Ein erweitertes Schema der App für Filmkritiken, das diese Anwendungsfälle und Beispiele veranschaulicht, ist unten dargestellt. Es erweitert schema.gql über den Starttyp Movie hinaus um die Typen Actor und MovieActor, damit wir komplexere Abfragen prototypisieren 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 schreiben, um Daten für den Startzustand einzufügen

Beim Prototyping können Sie Daten mit mehreren Datensätzen füllen, wenn Ihre Abfragen und Mutationen mit einer Reihe diskreter Werte getestet werden müssen. Sie können beispielsweise mehrere Filmdatensätze mit verschiedenen Genres und Bewertungen hinzufügen, um Vergleiche und Filter zu testen.

Daten in die Tabellen Movie und Actor einfügen

Je nach Phase des Prototypings können Sie dieselbe Methode verwenden, die im Leitfaden Erste Schritte beschrieben wird, um einen oder zwei Datensätze einzufügen. Sie können also CodeLenses in der Data Connect VS Code-Erweiterung verwenden, um _insert Mutationen, Daten fest zu codieren und auszuführen diese Mutationen in VS Code.

Es ist jedoch sinnvoller, viele Datensätze mit einem _insertMany Vorgang in eine Tabelle einzufügen. Im Beispiel der App für Filmkritiken werden so die ersten Daten in Movie und Actor eingefügt.

Wenn Sie die folgenden Mutationen mit der Data Connect VS Code-Erweiterung ausführen möchten, klicken Sie in der entsprechenden Dateieditoransicht auf die CodeLens-Schaltflächen Ausführen (Produktion) oder Ausführen (Lokal) , je nachdem, ob Sie Prototypen mit Ihrem Produktionsdienst oder einer lokalen Datenbank erstellen.

# 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 Verknüpfungstabelle MovieActor einfügen

Wenn Sie Abfragen und Mutationen mit Verknüpfungen 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 Direktive @transaction hinzufügen, um sicherzustellen, dass 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 schreiben, um eingefügte Daten zurückzusetzen

Beim Prototyping und bei der CI/CD kann es nützlich sein, die Daten auf einen Startzustand zurückzusetzen, um eine neue Reihe von Tests für einen neuen Datensatz auszuführen.

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

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

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

Produktionsentwicklung: Admin SDK zum Füllen und Aktualisieren verwenden

Das Firebase Admin SDK ist verfügbar, wenn Sie in privilegierten Umgebungen arbeiten möchten. Dies ist ein wichtiger Anwendungsfall, wenn Sie Tausende von Datensätzen laden möchten, da Bulk-Datenvorgänge für Ihre Produktionsdaten kritisch sind.

Firebase Admin SDK installieren

Auch wenn Sie hauptsächlich lokal arbeiten, empfiehlt Firebase, das Admin SDK einzurichten, damit Sie Firebase Data Connect in einer privilegierten Umgebung verwenden können, einschließlich Ihrer lokalen Umgebung. Sie müssen das Admin SDK für Node.js einrichten.

Weitere Informationen zur Verwendung des Admin SDK in anderen AnwendungsfällenData Connect

Bulk-Ladevorgänge und ‑Aktualisierungen von Produktionsdaten ausführen

Die API für die Bulk-Datenverwaltung erstellt in Ihrem Namen GraphQL-Mutationen, anstatt Sie aufzufordern, mutation {...}-Strings mit der zuvor beschriebenen executeGraphQL-API zu erstellen, um hier und da lokal einige Zeilen hinzuzufügen.

Ein großer Vorteil der Verwaltungs-API ist die Möglichkeit, Arrays von Daten für CI/CD-Abläufe separat zu verwalten und wiederzuverwenden oder große Bulk-Datendateien für Produktionsdaten einzurichten.

Die folgenden Snippets zeigen, wie Sie ein Bulk-Datenskript einrichten.

import { initializeApp } from 'firebase-admin/app';
import { getDataConnect } from 'firebase-admin/data-connect';

const app = initializeApp();

const dc = getDataConnect({ location: "us-west2", serviceId: "my-service" });

const 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",
    }
];

// Methods of the bulk operations API
const resp = await dc.insert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.insertMany("movie" /*table name*/, data);

// Or
const resp = await dc.upsert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.upsertMany("movie" /*table name*/, data);

Produktionsentwicklung: SQL für Bulk-Datenaktualisierungen verwenden

Wenn Sie in der Produktion mit einem stabilen Schema arbeiten und Ihr Schema nicht ändern, können Sie in Ihrer Cloud SQL-Instanz Datenladevorgänge und ‑Aktualisierungen verwalten.

Informationen zum Importieren von Daten finden Sie im Leitfaden zu Cloud SQL for PostgreSQL.

Nächste Schritte