In Firebase SQL Connect, können Sie Bulk-Daten auf verschiedene Arten laden und aktualisieren, je nach Ihren Workflows und Umgebungen:
Beim lokalen Prototyping , wenn Sie alternative Schemas ausprobieren, können Sie Daten Seeding-Mutationen in einer lokalen Entwicklungsumgebung mit der VS Code-Erweiterung für SQL Connect, dem SQL Connect Emulator und einer lokalen Datenbankinstanz erstellen und aufrufen.
Bei der Produktionsentwicklung mit einem stabilem Schema haben Sie zwei Möglichkeiten, wenn Sie größere CI/CD-Abläufe ausführen und Produktionsdaten verwalten:
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 SQL 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-Insert-Mutation 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.
Ihre Prototyping-Umgebung benötigt Code, um Daten einzufügen. Dieser Leitfaden enthält einige Beispiele, die Folgendes veranschaulichen:
- Verwendung von
_insertManyund_upsertManyfür einzelne Tabellen - Verwendung von
_insertManyfü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 einzuschließen, 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 Startdaten einzufügen
Während des Prototypings 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 Startleitfaden beschrieben wird, um einen oder zwei Datensätze einzufügen. Das heißt, Sie können CodeLenses in der VS Code-Erweiterung für SQL Connect verwenden, um _insert Mutationen zu erstellen, Daten hartcodiert einzugeben 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 der App für Filmkritiken werden dadurch die ersten Daten in Movie und Actor eingefügt.
Wenn Sie die folgenden Mutationen mit der VS Code-Erweiterung für SQL Connect 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 mit Ihrem Produktionsdienst oder einer lokalen Datenbank prototypisieren.
# 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 CI/CD-Vorgängen 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 SQL 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 SQL 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ällenSQL 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
- Informationen zum Einbinden des Admin SDK in Ihre SQL Connect Projekte.