Anleitung und Anforderungen für Lab-Einrichtung
Schützen Sie Ihr Konto und Ihren Fortschritt. Verwenden Sie immer den privaten Modus und Lab-Anmeldedaten, um dieses Lab auszuführen.

Cloud Spanner – Datenbankschemas definieren und Abfragepläne verstehen

Lab 1 Stunde 30 Minuten universal_currency_alt 1 Guthabenpunkt show_chart Einsteiger
info Dieses Lab kann KI-Tools enthalten, die den Lernprozess unterstützen.
Dieser Inhalt ist noch nicht für Mobilgeräte optimiert.
Die Lernumgebung funktioniert am besten, wenn Sie auf einem Computer über einen per E‑Mail gesendeten Link darauf zugreifen.

GSP1050

Logo: Google Cloud-Labs zum selbstbestimmten Lernen

Übersicht

Cloud Spanner ist der vollständig verwaltete, horizontal skalierbare relationale Datenbankdienst von Google. Kundinnen und Kunden aus den Bereichen Finanzdienstleistungen, Gaming, Einzelhandel und vielen anderen Branchen vertrauen darauf, dass sie ihre anspruchsvollsten Arbeitslasten ausführen können, bei denen Konsistenz und Verfügbarkeit im großen Maßstab entscheidend sind.

In diesem Lab lernen Sie schemabezogene Funktionen von Cloud Spanner kennen und wenden diese auf eine Datenbank für Bankgeschäfte an. Außerdem erfahren Sie, nach welchen Methoden und Regeln Cloud Spanner Abfragepläne erstellt.

Aufgaben

In diesem Lab lernen Sie, schemabezogene Attribute einer Cloud Spanner-Instanz zu ändern.

  • Daten in Tabellen laden
  • Vordefinierten Python-Clientbibliothekscode zum Laden von Daten verwenden
  • Daten mit Clientbibliotheken abfragen
  • Datenbankschema aktualisieren
  • Einen sekundären Index hinzufügen
  • Abfragepläne prüfen

Einrichtung und Anforderungen

Vor dem Klick auf „Start Lab“ (Lab starten)

Lesen Sie diese Anleitung. Labs sind zeitlich begrenzt und können nicht pausiert werden. Der Timer beginnt zu laufen, wenn Sie auf Lab starten klicken, und zeigt Ihnen, wie lange Google Cloud-Ressourcen für das Lab verfügbar sind.

In diesem praxisorientierten Lab können Sie die Lab-Aktivitäten in einer echten Cloud-Umgebung durchführen – nicht in einer Simulations- oder Demo-Umgebung. Dazu erhalten Sie neue, temporäre Anmeldedaten, mit denen Sie für die Dauer des Labs auf Google Cloud zugreifen können.

Für dieses Lab benötigen Sie Folgendes:

  • Einen Standardbrowser (empfohlen wird Chrome)
Hinweis: Nutzen Sie den privaten oder Inkognitomodus (empfohlen), um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.
  • Zeit für die Durchführung des Labs – denken Sie daran, dass Sie ein begonnenes Lab nicht unterbrechen können.
Hinweis: Verwenden Sie für dieses Lab nur das Teilnehmerkonto. Wenn Sie ein anderes Google Cloud-Konto verwenden, fallen dafür möglicherweise Kosten an.

Lab starten und bei der Google Cloud Console anmelden

  1. Klicken Sie auf Lab starten. Wenn Sie für das Lab bezahlen müssen, wird ein Dialogfeld geöffnet, in dem Sie Ihre Zahlungsmethode auswählen können. Auf der linken Seite befindet sich der Bereich „Details zum Lab“ mit diesen Informationen:

    • Schaltfläche „Google Cloud Console öffnen“
    • Restzeit
    • Temporäre Anmeldedaten für das Lab
    • Ggf. weitere Informationen für dieses Lab
  2. Klicken Sie auf Google Cloud Console öffnen (oder klicken Sie mit der rechten Maustaste und wählen Sie Link in Inkognitofenster öffnen aus, wenn Sie Chrome verwenden).

    Im Lab werden Ressourcen aktiviert. Anschließend wird ein weiterer Tab mit der Seite „Anmelden“ geöffnet.

    Tipp: Ordnen Sie die Tabs nebeneinander in separaten Fenstern an.

    Hinweis: Wird das Dialogfeld Konto auswählen angezeigt, klicken Sie auf Anderes Konto verwenden.
  3. Kopieren Sie bei Bedarf den folgenden Nutzernamen und fügen Sie ihn in das Dialogfeld Anmelden ein.

    {{{user_0.username | "Username"}}}

    Sie finden den Nutzernamen auch im Bereich „Details zum Lab“.

  4. Klicken Sie auf Weiter.

  5. Kopieren Sie das folgende Passwort und fügen Sie es in das Dialogfeld Willkommen ein.

    {{{user_0.password | "Password"}}}

    Sie finden das Passwort auch im Bereich „Details zum Lab“.

  6. Klicken Sie auf Weiter.

    Wichtig: Sie müssen die für das Lab bereitgestellten Anmeldedaten verwenden. Nutzen Sie nicht die Anmeldedaten Ihres Google Cloud-Kontos. Hinweis: Wenn Sie Ihr eigenes Google Cloud-Konto für dieses Lab nutzen, können zusätzliche Kosten anfallen.
  7. Klicken Sie sich durch die nachfolgenden Seiten:

    • Akzeptieren Sie die Nutzungsbedingungen.
    • Fügen Sie keine Wiederherstellungsoptionen oder Zwei-Faktor-Authentifizierung hinzu (da dies nur ein temporäres Konto ist).
    • Melden Sie sich nicht für kostenlose Testversionen an.

Nach wenigen Augenblicken wird die Google Cloud Console in diesem Tab geöffnet.

Hinweis: Wenn Sie auf Google Cloud-Produkte und ‑Dienste zugreifen möchten, klicken Sie auf das Navigationsmenü oder geben Sie den Namen des Produkts oder Dienstes in das Feld Suchen ein. Symbol für das Navigationsmenü und Suchfeld

Cloud Shell aktivieren

Cloud Shell ist eine virtuelle Maschine, auf der Entwicklertools installiert sind. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Mit Cloud Shell erhalten Sie Befehlszeilenzugriff auf Ihre Google Cloud-Ressourcen.

  1. Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren Symbol für Cloud Shell-Aktivierung.

  2. Klicken Sie sich durch die folgenden Fenster:

    • Fahren Sie mit dem Informationsfenster zu Cloud Shell fort.
    • Autorisieren Sie Cloud Shell, Ihre Anmeldedaten für Google Cloud API-Aufrufe zu verwenden.

Wenn eine Verbindung besteht, sind Sie bereits authentifiziert und das Projekt ist auf Project_ID, eingestellt. Die Ausgabe enthält eine Zeile, in der die Project_ID für diese Sitzung angegeben ist:

Ihr Cloud-Projekt in dieser Sitzung ist festgelegt als {{{project_0.project_id | "PROJECT_ID"}}}

gcloud ist das Befehlszeilentool für Google Cloud. Das Tool ist in Cloud Shell vorinstalliert und unterstützt die Tab-Vervollständigung.

  1. (Optional) Sie können den aktiven Kontonamen mit diesem Befehl auflisten:
gcloud auth list
  1. Klicken Sie auf Autorisieren.

Ausgabe:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Um das aktive Konto festzulegen, führen Sie diesen Befehl aus: $ gcloud config set account `ACCOUNT`
  1. (Optional) Sie können die Projekt-ID mit diesem Befehl auflisten:
gcloud config list project

Ausgabe:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Hinweis: Die vollständige Dokumentation für gcloud finden Sie in Google Cloud in der Übersicht zur gcloud CLI.

Cloud Spanner-Instanz

Damit Sie dieses Lab schneller durcharbeiten können, wurden die Cloud Spanner-Instanz, die Datenbank und Tabellen automatisch für Sie erstellt.

Hier sind einige Details dazu:

Element Name Details
Cloud Spanner-Instanz banking-ops-instance Instanz auf Projektebene
Cloud Spanner-Datenbank banking-ops-db Instanzspezifische Datenbank
Tabelle Portfolio Enthält Bankangebote auf höchstem Niveau
Tabelle Category Enthält Gruppierungen von Bankangeboten der zweiten Ebene
Tabelle Product Enthält bestimmte Bankangebote für Werbebuchungen
Tabelle Campaigns Enthält Details zu Marketinginitiativen

Aufgabe 1: Daten in Tabellen laden

Die Datenbank banking-ops-db wurde mit leeren Tabellen erstellt. Führen Sie die folgenden Schritte aus, um Daten in drei der Tabellen (Portfolio, Category und Product) zu laden.

  1. Öffnen Sie in der Cloud Console das Navigationsmenü console_nav_small.png > Alle Produkte ansehen. Klicken Sie unter Datenbanken auf Spanner.

  2. Der Name der Instanz ist banking-ops-instance. Klicken Sie auf den Namen, um die Datenbanken aufzurufen.

  3. Die zugehörige Datenbank heißt banking-ops-db. Klicken Sie auf den Namen, scrollen Sie nach unten zu Tabellen. Sie sehen, dass bereits vier Tabellen vorhanden sind.

  4. Klicken Sie im linken Bereich der Console auf Spanner Studio. Klicken Sie dann im rechten Frame auf die Taste + Neuer SQL-Editor-Tab.

  5. Daraufhin wird die Seite Abfrage eingeblendet. Fügen Sie die folgenden Insert-Anweisungen als Block ein, um die Tabelle Portfolio zu laden. Spanner führt die Anweisungen nacheinander aus. Klicken Sie auf Ausführen.

insert into Portfolio (PortfolioId, Name, ShortName, PortfolioInfo) values (1, "Banking", "Bnkg", "All Banking Business"); insert into Portfolio (PortfolioId, Name, ShortName, PortfolioInfo) values (2, "Asset Growth", "AsstGrwth", "All Asset Focused Products"); insert into Portfolio (PortfolioId, Name, ShortName, PortfolioInfo) values (3, "Insurance", "Ins", "All Insurance Focused Products");
  1. Auf der unteren Seite des Bildschirms werden die Ergebnisse des Einfügens zeilenweise angezeigt. Außerdem erscheint in jeder Zeile mit eingefügten Daten ein grünes Häkchen. Die Tabelle Portfolio enthält jetzt drei Zeilen.

  2. Klicken Sie oben auf der Seite auf Löschen.

  3. Fügen Sie die folgenden Insert-Anweisungen als Block ein, um die Tabelle Category zu laden. Klicken Sie auf Ausführen.

insert into Category (CategoryId,PortfolioId,CategoryName) values (1,1,"Cash"); insert into Category (CategoryId,PortfolioId,CategoryName) values (2,2,"Investments - Short Return"); insert into Category (CategoryId,PortfolioId,CategoryName) values (3,2,"Annuities"); insert into Category (CategoryId,PortfolioId,CategoryName) values (4,3,"Life Insurance");
  1. Auf der unteren Seite des Bildschirms werden die Ergebnisse des Einfügens zeilenweise angezeigt. Außerdem erscheint in jeder Zeile mit eingefügten Daten ein grünes Häkchen. Die Tabelle Category enthält jetzt vier Zeilen.

  2. Klicken Sie oben auf der Seite auf Löschen.

  3. Fügen Sie die folgenden Insert-Anweisungen als Block ein, um die Tabelle Product zu laden. Klicken Sie auf Ausführen.

insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (1,1,1,"Checking Account","ChkAcct","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (2,2,2,"Mutual Fund Consumer Goods","MFundCG","Investment LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (3,3,2,"Annuity Early Retirement","AnnuFixed","Investment LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (4,4,3,"Term Life Insurance","TermLife","Insurance LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (5,1,1,"Savings Account","SavAcct","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (6,1,1,"Personal Loan","PersLn","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (7,1,1,"Auto Loan","AutLn","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (8,4,3,"Permanent Life Insurance","PermLife","Insurance LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (9,2,2,"US Savings Bonds","USSavBond","Investment LOB");
  1. Auf der unteren Seite des Bildschirms werden die Ergebnisse des Einfügens zeilenweise angezeigt. Außerdem erscheint in jeder Zeile mit eingefügten Daten ein grünes Häkchen. Die Tabelle Product enthält jetzt neun Zeilen.

  2. Klicken Sie auf Fortschritt prüfen.

Daten in die Tabellen „Portfolio“, „Category“ und „Product“ laden

Aufgabe 2: Vorab erstellten Python-Clientbibliothekscode zum Laden von Daten verwenden

In den nächsten Schritten verwenden Sie die in Python geschriebenen Clientbibliotheken.

  1. Öffnen Sie die Cloud Shell und fügen Sie die folgenden Befehle ein. Damit erstellen und öffnen Sie ein neues Verzeichnis, in dem die erforderlichen Dateien gespeichert werden.
mkdir python-helper cd python-helper
  1. Laden Sie zwei Dateien herunter. Eine wird zum Einrichten der Umgebung verwendet. Die andere ist der Lab-Code.
wget https://storage.googleapis.com/cloud-training/OCBL373/requirements.txt wget https://storage.googleapis.com/cloud-training/OCBL373/snippets.py
  1. Erstellen Sie eine isolierte Python-Umgebung und installieren Sie Abhängigkeiten für den Cloud Spanner-Client.
pip install -r requirements.txt pip install setuptools
  1. Die Datei snippets.py ist eine konsolidierte Datei mit mehreren Cloud Spanner-DDL-, DML- und DCL-Funktionen, die Sie in diesem Lab als Hilfsmittel verwenden. Führen Sie snippets.py mit dem Argument insert_data aus, um die Tabelle Campaigns mit Daten zu füllen.
python snippets.py banking-ops-instance --database-id banking-ops-db insert_data
  1. Klicken Sie auf Fortschritt prüfen.
Daten in die Tabelle „Campaigns“ laden

Aufgabe 3: Daten mit Clientbibliotheken abfragen

Mit der Funktion query_data() in snippets.py können Sie die Datenbank abfragen. In diesem Fall verwenden Sie sie, um die in die Tabelle Campaigns geladenen Daten zu bestätigen. Sie nehmen keine Änderungen am Code vor. Der hier gezeigte Abschnitt dient nur als Referenz.

def query_data(instance_id, database_id): """Queries sample data from the database using SQL.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.snapshot() as snapshot: results = snapshot.execute_sql( "SELECT CampaignId,PortfolioId,CampaignStartDate,CampaignEndDate,CampaignName,CampaignBudget FROM Campaigns" ) for row in results: print(u"CampaignId: {}, PortfolioId: {}, CampaignStartDate: {}, CampaignEndDate: {}, CampaignName: {}, CampaignBudget: {}".format(*row))
  1. Führen Sie snippets.py mit dem Argument query_data aus, um die Tabelle Campaigns abzufragen.
python snippets.py banking-ops-instance --database-id banking-ops-db query_data

Das Ergebnis sollte etwa so aussehen:

CampaignId: 1, PortfolioId: 1, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: New Account Reward, CampaignBudget: 15000 CampaignId: 2, PortfolioId: 2, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: Intro to Investments, CampaignBudget: 5000 CampaignId: 3, PortfolioId: 2, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: Youth Checking Accounts, CampaignBudget: 25000 CampaignId: 4, PortfolioId: 3, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: Protect Your Family, CampaignBudget: 10000

Aufgabe 4: Datenbankschema aktualisieren

Als Datenbankadministrator müssen Sie der Tabelle Category eine neue Spalte mit dem Namen MarketingBudget hinzufügen. Damit einer vorhandenen Tabelle eine neue Spalte hinzugefügt werden kann, muss das Datenbankschema aktualisiert werden. Cloud Spanner unterstützt Schemaaktualisierungen für Datenbanken, ohne dass die Traffic-Bereitstellung unterbrochen werden muss. Bei einer Schemaaktualisierung muss die Datenbank nicht offline geschaltet und es müssen keine ganzen Tabellen oder Spalten gesperrt werden. Sie können während der Aktualisierung weiter Daten in die Datenbank schreiben oder darin lesen.

Mit Python eine Spalte hinzufügen

Die Methode update_ddl() der Klasse Database wird verwendet, um das Schema zu ändern.

Verwenden Sie die Funktion add_column() in snippets.py, die diese Methode implementiert. Sie nehmen keine Änderungen am Code vor. Der hier gezeigte Abschnitt dient nur als Referenz.

def add_column(instance_id, database_id): """Adds a new column to the Albums table in the example database.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) operation = database.update_ddl( ["ALTER TABLE Category ADD COLUMN MarketingBudget INT64"] ) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) print("Added the MarketingBudget column.")
  1. Führen Sie snippets.py mit dem Argument add_column aus.
python snippets.py banking-ops-instance --database-id banking-ops-db add_column
  1. Klicken Sie auf Fortschritt prüfen.
Der Tabelle „Category“ eine Spalte hinzufügen

Weitere Optionen zum Hinzufügen einer Spalte zu vorhandenen Tabellen:

Einen DDL-Befehl über die gcloud CLI ausgeben

Hinweis: Diese Option wird als alternatives Beispiel gezeigt. Führen Sie diesen Befehl nicht aus.

Das folgende Codebeispiel erledigt dieselbe Aufgabe, die Sie gerade mit Python ausgeführt haben.

gcloud spanner databases ddl update banking-ops-db --instance=banking-ops-instance --ddl='ALTER TABLE Category ADD COLUMN MarketingBudget INT64;'

Einen DDL-Befehl in der Cloud Console ausgeben

Hinweis: Diese Option wird als alternatives Beispiel gezeigt. Führen Sie diese Aktion nicht aus.
  1. Klicken Sie in der Datenbankliste auf den Namen der Tabelle.
  2. Klicken Sie rechts oben auf der Seite auf DDL schreiben.
  3. Fügen Sie die entsprechende DDL in das Feld DDL-Vorlagen ein.
  4. Klicken Sie auf Senden.

AddColumnUI.png

Daten in die neue Spalte schreiben

Mit dem folgenden Code werden Daten in die neue Spalte geschrieben. Er legt für MarketingBudget den Wert 100000 für die Zeile mit CategoryId = 1 und PortfolioId = 1 fest und den Wert 500000 für die Zeile mit CategoryId = 3 und PortfolioId = 2. Sie nehmen keine Änderungen am Code vor. Der hier gezeigte Abschnitt dient nur als Referenz.

def update_data(instance_id, database_id): """Updates sample data in the database. Dadurch wird die Spalte „MarketingBudget“ aktualisiert, die vor dem Ausführen dieses Beispiels erstellt werden muss. Sie können die Spalte hinzufügen, indem Sie das Beispiel „add_column“ oder diese DDL-Anweisung für Ihre Datenbank ausführen. """ spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.batch() as batch: batch.update( table="Category", columns=("CategoryId", "PortfolioId", "MarketingBudget"), values=[(1, 1, 100000), (3, 2, 500000)], ) print("Updated data.")
  1. Führen Sie snippets.py mit dem Argument update_data aus.
python snippets.py banking-ops-instance --database-id banking-ops-db update_data
  1. Führen Sie die Abfrage noch einmal aus, um die Aktualisierung anzuzeigen. Führen Sie snippets.py mit dem Argument query_data_with_new_column aus.
python snippets.py banking-ops-instance --database-id banking-ops-db query_data_with_new_column

Das Ergebnis sollte so aussehen:

CategoryId: 1, PortfolioId: 1, MarketingBudget: 100000 CategoryId: 2, PortfolioId: 2, MarketingBudget: None CategoryId: 3, PortfolioId: 2, MarketingBudget: 500000 CategoryId: 4, PortfolioId: 3, MarketingBudget: None

Aufgabe 5: Einen sekundären Index hinzufügen

Angenommen, Sie möchten alle Zeilen aus „Categories“ abrufen, deren Werte für „CategoryNames“ in einem bestimmten Bereich liegen. Sie könnten dazu alle Werte aus der Spalte CategoryName mit einer SQL-Anweisung oder einem Leseaufruf lesen und dann die Zeilen verwerfen, die die Kriterien nicht erfüllen. Dieser vollständige Tabellenscan wäre jedoch sehr kostspielig, insbesondere bei Tabellen mit vielen Zeilen. Stattdessen können Sie einen sekundären Index für die Tabelle erstellen und damit das Abrufen von Zeilen beim Suchen über Spalten mit nicht primärem Schlüssel beschleunigen.

Damit ein sekundärer Index einer vorhandenen Tabelle hinzugefügt werden kann, muss das Schema aktualisiert werden. Wie bei anderen Schemaaktualisierungen kann mit Cloud Spanner ein Index hinzugefügt werden, ohne dass die Traffic-Bereitstellung unterbrochen werden muss. Cloud Spanner füllt den Index im Hintergrund mit Daten (auch als „Backfill“ bezeichnet). Backfills können einige Minuten dauern, aber Sie müssen die Datenbank nicht offline schalten und können während des Vorgangs weiter in alle Tabellen oder Spalten schreiben.

Einen sekundären Index mit der Python-Clientbibliothek hinzufügen

Verwenden Sie die Methode add_index(), um einen sekundären Index zu erstellen. Sie nehmen keine Änderungen am Code vor. Der hier gezeigte Abschnitt dient nur als Referenz.

def add_index(instance_id, database_id): """Adds a simple index to the example database.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) operation = database.update_ddl( ["CREATE INDEX CategoryByCategoryName ON Category(CategoryName)"] ) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) print("Added the CategoryByCategoryName index.")
  1. Führen Sie snippets.py mit dem Argument add_index aus.
python snippets.py banking-ops-instance --database-id banking-ops-db add_index
  1. Klicken Sie auf Fortschritt prüfen.
Der Tabelle „Category“ einen sekundären Index hinzufügen

Mit dem Index auslesen

Um Daten mit dem Index auszulesen, rufen Sie eine Variante der Methode read() auf, die einen Index enthält. Sie nehmen keine Änderungen am Code vor. Der hier gezeigte Abschnitt dient nur als Referenz.

def read_data_with_index(instance_id, database_id): """Reads sample data from the database using an index. """ spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.snapshot() as snapshot: keyset = spanner.KeySet(all_=True) results = snapshot.read( table="Category", columns=("CategoryId", "CategoryName"), keyset=keyset, index="CategoryByCategoryName", ) for row in results: print("CategoryId: {}, CategoryName: {}".format(*row))
  1. Führen Sie snippets.py mit dem Argument read_data_with_index aus.
python snippets.py banking-ops-instance --database-id banking-ops-db read_data_with_index

Das Ergebnis sollte so aussehen:

CategoryId: 3, CategoryName: Annuities CategoryId: 1, CategoryName: Cash CategoryId: 2, CategoryName: Investments - Short Return CategoryId: 4, CategoryName: Life Insurance

Index mit einer STORING-Klausel hinzufügen

Vielleicht haben Sie bemerkt, dass im obigen Beispiel das Lesen der Spalte MarketingBudget nicht enthalten ist. Die Leseschnittstelle von Cloud Spanner unterstützt nicht die Möglichkeit, einen Index mit einer Datentabelle zu verbinden, um Werte zu suchen, die nicht im Index gespeichert sind.

Um diese Einschränkung zu umgehen, erstellen Sie eine alternative Definition des Index CategoryByCategoryName, die eine Kopie von MarketingBudget im Index speichert.

Verwenden Sie die Methode update_ddl() der Klasse Database, um einen Index mit einer STORING-Klausel hinzuzufügen. Sie nehmen keine Änderungen am Code vor. Der hier gezeigte Abschnitt dient nur als Referenz.

def add_storing_index(instance_id, database_id): """Adds an storing index to the example database.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) operation = database.update_ddl( [ "CREATE INDEX CategoryByCategoryName2 ON Category(CategoryName)" "STORING (MarketingBudget)" ] ) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) print("Added the CategoryByCategoryName2 index.")
  1. Führen Sie snippets.py mit dem Argument add_storing_index aus.
python snippets.py banking-ops-instance --database-id banking-ops-db add_storing_index

Sie können jetzt einen Lesevorgang ausführen, der die Spalten CategoryId, CategoryName und MarketingBudget abruft, während Sie den Index CategoryByCategoryName2 verwenden. Sie nehmen keine Änderungen am Code vor. Der hier gezeigte Abschnitt dient nur als Referenz.

def read_data_with_storing_index(instance_id, database_id): """Reads sample data from the database using an index with a storing clause. """ spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.snapshot() as snapshot: keyset = spanner.KeySet(all_=True) results = snapshot.read( table="Category", columns=("CategoryId", "CategoryName", "MarketingBudget"), keyset=keyset, index="CategoryByCategoryName2", ) for row in results: print(u"CategoryNameId: {}, CategoryName: {}, " "MarketingBudget: {}".format(*row))
  1. Führen Sie snippets.py mit dem Argument read_data_with_storing_index aus.
python snippets.py banking-ops-instance --database-id banking-ops-db read_data_with_storing_index

Das Ergebnis sollte so aussehen:

CategoryNameId: 3, CategoryName: Annuities, MarketingBudget: 500000 CategoryNameId: 1, CategoryName: Cash, MarketingBudget: 100000 CategoryNameId: 2, CategoryName: Investments - Short Return, MarketingBudget: None CategoryNameId: 4, CategoryName: Life Insurance, MarketingBudget: None

Aufgabe 6: Abfragepläne prüfen

In diesem Abschnitt lernen Sie Abfragepläne in Cloud Spanner kennen.

  1. Kehren Sie zur Cloud Console zurück. Sie sollten sich immer noch auf dem Tab Abfrage in Spanner Studio befinden. Löschen Sie alle vorhandenen Abfragen, fügen Sie die folgende Abfrage ein und führen Sie sie aus:
SELECT Name, ShortName, CategoryName FROM Portfolio INNER JOIN Category ON Portfolio.PortfolioId = Category.PortfolioId;
  1. Das Ergebnis sollte so aussehen:

PlanQuery.png

Phasen einer Abfrage

Eine SQL-Abfrage in Cloud Spanner wird zuerst in einen Ausführungsplan kompiliert und anschließend zur Ausführung an einen ersten Root-Server gesendet. Der Root-Server ist so gewählt, dass die Anzahl der Sprünge (Hops), die die abgefragten Daten erreichen, minimiert wird. Anschließend führt der Root-Server folgende Schritte durch:

  • Initiierung der Remote-Ausführung von Teilplänen (falls erforderlich)
  • Warten auf die Ergebnisse der Remote-Ausführungen
  • Verwaltung aller verbleibenden lokalen Ausführungsschritte, zum Beispiel das Aggregieren von Ergebnissen
  • Ausgabe der Ergebnisse für die Abfrage

Remote-Server, die einen Teilplan erhalten, fungieren als „Root“-Server für ihren Teilplan und folgen demselben Modell wie der oberste Root-Server. Das Ergebnis ist eine Struktur von Remote-Ausführungen. Die Abfrageausführung wird konzeptionell von oben nach unten ausgeführt und Abfrageergebnisse werden von unten nach oben ausgegeben. Im folgenden Diagramm sehen Sie dieses Muster:

SPNPlan.png

Aggregierte Abfrage

Sehen Sie sich den Abfrageplan für eine aggregierte Abfrage an.

  1. Löschen Sie auf dem Tab Abfrage in Spanner Studio die vorhandene Abfrage, fügen Sie die folgende Abfrage ein und führen Sie sie aus.
SELECT pr.ProductId, COUNT(*) AS ProductCount FROM Product AS pr WHERE pr.ProductId < 100 GROUP BY pr.ProductId;
  1. Sobald die Abfrage abgeschlossen ist, klicken Sie unter dem Text der Abfrage auf den Tab Erklärung, um den Abfrageplan zu prüfen.

Cloud Spanner sendet den Ausführungsplan an einen Root-Server, der die Abfrageausführung koordiniert und die Remote-Verteilung von Teilplänen ausführt.

Dieser Ausführungsplan beginnt mit einer Serialisierung, die alle ausgegebenen Werte ordnet. Dann führt der Plan einen ersten Hash-Aggregat-Operator aus, um vorläufige Ergebnisse zu berechnen. Dann wird eine Distributed Union ausgeführt, die Teilpläne an Remote-Server verteilt, deren Splits ProductId < 100 erfüllen. Die Distributed Union sendet Ergebnisse an einen finalen Hash-Aggregat-Operator. Der Aggregate-Operator führt die-Zusammenfassung nach ProductId aus und gibt Ergebnisse an einen Operator des Typs Serialize Result aus. Schließlich wird ein Scan durchgeführt, um die auszugebenden Ergebnisse zu sortieren.

Das Ergebnis sollte so aussehen:

SPNAggPlan.png

Tipp: Wenn Sie weitere Details zu den einzelnen Schritten im Abfrageplan erhalten möchten, klicken Sie auf einen der Operatoren. Die rechte Seite des Bildschirms ändert sich dann entsprechend.

SPNPlanDetail.png

Zusammengelegte Join-Abfragen

Verschachtelte Tabellen werden gemeinsam mit ihren Zeilen zusammengehöriger Tabellen physisch gespeichert. Ein Join zwischen verschachtelten Tabellen wird als „zusammengelegter Join“ bezeichnet. Zusammengelegte Joins können Leistungsverbesserungen gegenüber Joins bieten, für die Indizes oder Back-Joins erforderlich sind.

  1. Löschen Sie auf dem Tab Abfrage in Spanner Studio die vorhandene Abfrage, fügen Sie die folgende Abfrage ein und führen Sie sie aus.
SELECT c.CategoryName, pr.ProductName FROM Category AS c, Product AS pr WHERE c.PortfolioId = pr.PortfolioId AND c.CategoryId = pr.CategoryId;
  1. Sobald die Abfrage abgeschlossen ist, klicken Sie unter dem Text der Abfrage auf den Tab Erklärung, um den Abfrageplan zu prüfen.

Dieser Ausführungsplan beginnt mit dem Operator „Distributed Union“. Er verteilt Teilpläne an Remote-Server, die Splits der Tabelle Category haben. Da es sich bei Product um eine verschachtelte Tabelle von Category handelt, kann jeder Remote-Server den gesamten Teilplan auf jedem Remote-Server ausführen, ohne dass eine Verbindung zu einem anderen Server hergestellt werden muss.

Der Teilplan enthält einen Cross Apply. Jeder Cross Apply führt einen Tabellenscan (Table Scan) der Tabelle Category aus, um PortfolioId, CategoryId und CategoryName abzurufen. Der Cross Apply ordnet dann die Ausgabe aus dem Tabellenscan der Ausgabe eines Indexscans des Indexes CategoryByCategoryName zu. Dazu muss die gefilterte PortfolioId im Index mit der PortfolioId aus der Ausgabe des Tabellenscans übereinstimmen. Jeder Cross Apply sendet seine Ergebnisse an einen Operator „Serialize Result“, der die Daten von CategoryName und ProductName serialisiert und an die „Local Distributed Unions“ ausgibt. Die „Distributed Union“ aggregiert die Ergebnisse der „Local Distributed Unions“ und gibt sie als Abfrageergebnis aus.

SPNColocated.png

Das wars! Sie haben das Lab erfolgreich abgeschlossen.

Sie haben jetzt ein solides Verständnis für die schemabezogenen Funktionen von Cloud Spanner sowie für die Methoden, nach denen Spanner Abfragepläne erstellt.

Google Cloud-Schulungen und -Zertifizierungen

In unseren Schulungen erfahren Sie alles zum optimalen Einsatz unserer Google Cloud-Technologien und können sich entsprechend zertifizieren lassen. Unsere Kurse vermitteln technische Fähigkeiten und Best Practices, damit Sie möglichst schnell mit Google Cloud loslegen und Ihr Wissen fortlaufend erweitern können. Wir bieten On-Demand-, Präsenz- und virtuelle Schulungen für Anfänger wie Fortgeschrittene an, die Sie individuell in Ihrem eigenen Zeitplan absolvieren können. Mit unseren Zertifizierungen weisen Sie nach, dass Sie Experte im Bereich Google Cloud-Technologien sind.

Anleitung zuletzt am 14. Oktober 2024 aktualisiert

Lab zuletzt am 14. Oktober 2024 getestet

© 2026 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.

Vorbereitung

  1. Labs erstellen ein Google Cloud-Projekt und Ressourcen für einen bestimmten Zeitraum
  2. Labs haben ein Zeitlimit und keine Pausenfunktion. Wenn Sie das Lab beenden, müssen Sie von vorne beginnen.
  3. Klicken Sie links oben auf dem Bildschirm auf Lab starten, um zu beginnen

Privates Surfen verwenden

  1. Kopieren Sie den bereitgestellten Nutzernamen und das Passwort für das Lab
  2. Klicken Sie im privaten Modus auf Konsole öffnen

In der Konsole anmelden

  1. Melden Sie sich mit Ihren Lab-Anmeldedaten an. Wenn Sie andere Anmeldedaten verwenden, kann dies zu Fehlern führen oder es fallen Kosten an.
  2. Akzeptieren Sie die Nutzungsbedingungen und überspringen Sie die Seite zur Wiederherstellung der Ressourcen
  3. Klicken Sie erst auf Lab beenden, wenn Sie das Lab abgeschlossen haben oder es neu starten möchten. Andernfalls werden Ihre bisherige Arbeit und das Projekt gelöscht.

Diese Inhalte sind derzeit nicht verfügbar

Bei Verfügbarkeit des Labs benachrichtigen wir Sie per E-Mail

Sehr gut!

Bei Verfügbarkeit kontaktieren wir Sie per E-Mail

Es ist immer nur ein Lab möglich

Bestätigen Sie, dass Sie alle vorhandenen Labs beenden und dieses Lab starten möchten

Privates Surfen für das Lab verwenden

Nutzen Sie den privaten oder Inkognitomodus, um dieses Lab durchzuführen. So wird verhindert, dass es zu Konflikten zwischen Ihrem persönlichen Konto und dem Teilnehmerkonto kommt und zusätzliche Gebühren für Ihr persönliches Konto erhoben werden.