In dieser Anleitung erfahren Sie, wie Sie unstrukturiertes Kundenfeedback in Form von Freitext mit strukturierten Verkaufsdaten in Lakehouse analysieren, um die Einführung eines neuen Produkts zu bewerten.
Stellen Sie sich vor, Sie sind Data Scientist bei Froyo, einem fiktiven Unternehmen für Frozen Yogurt, das eine neue Geschmacksrichtung namens Midnight Swirl auf den Markt bringen möchte. Bevor ein Unternehmen sich für eine globale Einführung entscheidet, muss es drei Fragen beantworten:
- Welche Allergene und Kundenfeedback-Anliegen gelten für die neue Geschmacksrichtung?
- Wie viel Nachfrage sollte das Unternehmen in den nächsten 12 Monaten für die bestehenden Geschmacksrichtungen erwarten?
- Wie schneiden die Kundenstimmung und die Absicht, noch einmal zu kaufen, im Vergleich zur prognostizierten Nachfrage ab?
Diese Anleitung richtet sich an Datenanalysten, Data Scientists und Data Engineers, die mit BigQuery und grundlegenden SQL-Konzepten vertraut sind. Sie führen jeden Schritt mit Cloud Shell und der Google Cloud Console aus.
Ziele
- Erstellen Sie einen Katalog im Lakehouse-Laufzeitkatalog und dann Apache Iceberg-Tabellen, in denen Produkt-, Verkaufs- und Kundenfeedbackdaten in Ihrem Lakehouse gespeichert werden.
- Mit den BigQuery AI-Funktionen
AI.CLASSIFYundAI.IFkönnen Sie Stimmungen, Themen und Kaufabsichten aus unstrukturiertem Text extrahieren, der in einer Iceberg-Tabelle gespeichert ist. - Mit der konversationellen Analyse in BigQuery Studio können Sie die Nachfrage für 12 Monate mit
AI.FORECASTvorhersagen und die Prognose mit Produkt- und Feedback-Informationen zusammenführen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Lakehouse
- BigQuery, including conversational analytics
- Cloud Storage
- Gemini Enterprise Agent Platform, for the Gemini models that AI functions call
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud -Projekt aus oder erstellen Sie eines.
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, damit Sie die nötigen Berechtigungen für die Aufgaben in dieser Anleitung haben:
-
Erstellen und löschen Sie den Katalog, den Namespace und die Tabellen im Lakehouse-Laufzeitkatalog:
BigLake-Administrator (
roles/biglake.admin) -
Cloud Storage-Bucket erstellen und löschen und dem Katalogdienstkonto Zugriff darauf gewähren: Storage-Administrator (
roles/storage.admin) -
Tabellen in BigQuery erstellen und ändern:
BigQuery-Dateneditor (
roles/bigquery.dataEditor) -
Abfragen ausführen und konversationelle Analysen in BigQuery Studio verwenden:
- BigQuery Studio User (
roles/bigquery.studioUser) - Gemini Data Analytics Stateless Chat User (
roles/geminidataanalytics.dataAgentStatelessUser) - Gemini for Google Cloud-Nutzer (
roles/cloudaicompanion.user)
- BigQuery Studio User (
-
Gemini-Modelle über BigQuery-KI-Funktionen aufrufen:
Agent Platform-Nutzer (
roles/aiplatform.user)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Umgebung vorbereiten
Aktivieren Sie Cloud Shell, legen Sie Umgebungsvariablen für Ihre Ressourcen fest und aktivieren Sie die erforderlichen APIs:
Aktivieren Sie Cloud Shell in der Google Cloud Console. Wenn Sie dazu aufgefordert werden, klicken Sie auf Autorisieren.
Legen Sie in Cloud Shell Umgebungsvariablen für Ihre Projekt-ID, Region, Bucket-Name, Katalog-ID und Ihren Namespace fest, damit Sie sie in dieser Anleitung wiederverwenden können:
export PROJECT_ID=$(gcloud config get-value project) export REGION="us-central1" export BUCKET_NAME="${PROJECT_ID}-froyo-lakehouse" export CATALOG_ID="froyo_catalog" export NAMESPACE_ID="froyo_lakehouse"
Aktivieren Sie die erforderlichen APIs für Ihr Projekt:
- BigQuery API (
bigquery.googleapis.com) - BigLake API (
biglake.googleapis.com), die Zugriff auf den Lakehouse-Laufzeitkatalog bietet - Cloud Storage API (
storage.googleapis.com) - Agent Platform API (
aiplatform.googleapis.com) - Conversational Analytics API (
geminidataanalytics.googleapis.com) - Gemini for Google Cloud API (
cloudaicompanion.googleapis.com)
Aktivieren Sie diese APIs in Cloud Shell:
gcloud services enable \ bigquery.googleapis.com \ biglake.googleapis.com \ storage.googleapis.com \ aiplatform.googleapis.com \ geminidataanalytics.googleapis.com \ cloudaicompanion.googleapis.com \ --project=${PROJECT_ID}
- BigQuery API (
Cloud Storage-Bucket erstellen
Erstellen Sie in Cloud Shell einen Cloud Storage-Bucket zum Speichern der Iceberg-Tabellendateien:
gcloud storage buckets create gs://${BUCKET_NAME} \ --project=${PROJECT_ID} \ --location=${REGION}
Katalog im Lakehouse-Laufzeitkatalog erstellen
Erstellen Sie mit dem Iceberg-REST-Katalogendpunkt einen Katalog im Credential-Vending-Modus, damit der Katalog mit seinem automatisch bereitgestellten Dienstkonto auf Ihren Bucket zugreifen kann und Sie keine BigQuery-Verbindung erstellen müssen:
Erstellen Sie in Cloud Shell einen Katalog mit mehreren Buckets im Credential-Vending-Modus:
gcloud biglake iceberg catalogs create ${CATALOG_ID} \ --project=${PROJECT_ID} \ --catalog-type=biglake \ --default-location=gs://${BUCKET_NAME} \ --primary-location=${REGION} \ --credential-mode=vended-credentials
Weisen Sie dem automatisch bereitgestellten Dienstkonto des Katalogs die Rolle „Storage Object User“ (
roles/storage.objectUser) für Ihren Bucket zu:CATALOG_SA=$(gcloud biglake iceberg catalogs describe ${CATALOG_ID} \ --project=${PROJECT_ID} \ --format='value(biglake-service-account)') gcloud storage buckets add-iam-policy-binding gs://${BUCKET_NAME} \ --member="serviceAccount:${CATALOG_SA}" \ --role="roles/storage.objectUser"
Erstellen Sie einen Namespace für Ihre Tabellen im Katalog:
gcloud biglake iceberg namespaces create ${NAMESPACE_ID} \ --project=${PROJECT_ID} \ --catalog=${CATALOG_ID}
Iceberg-Tabellen erstellen
Erstellen Sie drei Iceberg-Tabellen in Ihrem Katalog und laden Sie sie mit Beispieldaten:
products: Enthält die Produktliste, einschließlich des neuen Geschmacks „Midnight Swirl“ und des vorhandenen Geschmacks, auf dem er basiert.sales_history: Hier werden 24 Monate lang die monatlichen Verkaufszahlen für die vorhandenen Varianten nach Region gespeichert.customer_feedback: Speichert Feedbackdatensätze. In jeder Zeile werden strukturierte Metadaten (feedback_id,submitted_date,flavor_nameundchannel) mit einer SpaltecommentSTRINGkombiniert, in der unstrukturierter Freitext gespeichert wird.
In BigQuery verweisen Sie auf Lakehouse-Tabellen mit der vierteiligen P.C.N.T.-Namensstruktur (Project.Catalog.Namespace.Table).
Erstellen Sie in Cloud Shell die Tabellen
products,sales_historyundcustomer_feedbackund füllen Sie sie mit Beispieldaten. Das Skript führt jede Anweisung der Reihe nach aus und dauert etwa eine Minute:bq query --project_id=${PROJECT_ID} --location=${REGION} --use_legacy_sql=false << EOF -- Product list. CREATE TABLE \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.products\` ( product_name STRING, base_flavor STRING, status STRING, allergens STRING, target_regions STRING); INSERT INTO \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.products\` VALUES ('Midnight Swirl', 'Classic Chocolate', 'Planned launch', 'Milk, Soy', 'North America, Europe'), ('Classic Chocolate', 'Classic Chocolate', 'In market', 'Milk, Soy', 'North America, Europe, Asia Pacific'), ('Vanilla Bean', 'Vanilla Bean', 'In market', 'Milk', 'North America, Europe, Asia Pacific'), ('Strawberry Swirl', 'Strawberry Swirl', 'In market', 'Milk', 'North America, Europe, Asia Pacific'); -- Monthly sales history for the flavors that are in market. CREATE TABLE \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.sales_history\` ( sale_month DATE, flavor_name STRING, region STRING, units_sold INT64); INSERT INTO \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.sales_history\` WITH months AS ( SELECT sale_month FROM UNNEST(GENERATE_DATE_ARRAY( '2024-01-01', '2025-12-01', INTERVAL 1 MONTH)) AS sale_month ), flavors AS ( SELECT * FROM UNNEST([ STRUCT('Classic Chocolate' AS flavor_name, 1200 AS base_units), ('Vanilla Bean', 1000), ('Strawberry Swirl', 800)]) ), regions AS ( SELECT * FROM UNNEST([ STRUCT('North America' AS region, 1.0 AS region_factor), ('Europe', 0.8), ('Asia Pacific', 0.6)]) ) SELECT m.sale_month, f.flavor_name, r.region, CAST( f.base_units * r.region_factor -- Two percent month-over-month growth. * (1 + 0.02 * DATE_DIFF(m.sale_month, DATE '2024-01-01', MONTH)) -- Seasonal peak in July. * (1 + 0.25 * SIN(2 * ACOS(-1) * (EXTRACT(MONTH FROM m.sale_month) - 4) / 12)) AS INT64) AS units_sold FROM months AS m CROSS JOIN flavors AS f CROSS JOIN regions AS r; -- Customer feedback records with unstructured text in the comment column. CREATE TABLE \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.customer_feedback\` ( feedback_id INT64, submitted_date DATE, flavor_name STRING, channel STRING, comment STRING); INSERT INTO \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.customer_feedback\` VALUES (1, '2025-11-03', 'Midnight Swirl', 'Taste panel', "Rich, deep chocolate with a hint of salt. Honestly better than the classic chocolate. I'd order this every week."), (2, '2025-11-03', 'Midnight Swirl', 'Taste panel', "Loved the dark chocolate swirl, but it was a bit too bitter for my kids."), (3, '2025-11-04', 'Midnight Swirl', 'Taste panel', "Best froyo I've tried this year. Smooth texture and not too sweet."), (4, '2025-11-04', 'Midnight Swirl', 'Taste panel', "Great taste. I'd definitely buy it again if it's priced like the other flavors."), (5, '2025-11-05', 'Midnight Swirl', 'Taste panel', "Does this contain soy? I have a soy allergy so I skipped it. Please label it clearly."), (6, '2025-11-05', 'Midnight Swirl', 'Taste panel', "Tastes like a premium dessert. The sea salt really makes it."), (7, '2025-06-12', 'Classic Chocolate', 'App review', "Solid chocolate flavor, my go-to order."), (8, '2025-07-02', 'Classic Chocolate', 'App review', "It's fine, but a little too sweet compared to other brands."), (9, '2025-08-19', 'Classic Chocolate', 'Support email', "Consistently good. I wish the cups were bigger for the price."), (10, '2025-09-07', 'Classic Chocolate', 'Support email', "My chocolate froyo was icy this time and the texture was off."), (11, '2025-10-21', 'Classic Chocolate', 'App review', "Classic for a reason. Always creamy. I'll keep ordering it."), (12, '2025-11-05', 'Classic Chocolate', 'Taste panel', "Good but forgettable next to the new dark chocolate sample."), (13, '2025-05-14', 'Vanilla Bean', 'App review', "Real vanilla flavor, you can see the specks. Love it."), (14, '2025-06-30', 'Vanilla Bean', 'App review', "Pretty plain. I only order it as a base for toppings."), (15, '2025-08-02', 'Vanilla Bean', 'App review', "Creamy and simple, perfect for my toddler."), (16, '2025-09-15', 'Vanilla Bean', 'Support email', "The store was out of vanilla bean two weekends in a row."), (17, '2025-06-08', 'Strawberry Swirl', 'App review', "Tastes like fresh strawberries. Great in the summer."), (18, '2025-07-26', 'Strawberry Swirl', 'App review', "Too artificial tasting. Not a fan."), (19, '2025-08-11', 'Strawberry Swirl', 'Support email', "My favorite flavor. Please never discontinue it."), (20, '2025-10-03', 'Strawberry Swirl', 'App review', "The price went up, but it's still worth it."); EOF
Prüfen Sie, ob in Ihrem Katalog die Tabellen
products,sales_historyundcustomer_feedbackaufgeführt sind:gcloud biglake iceberg tables list \ --project=${PROJECT_ID} \ --catalog=${CATALOG_ID} \ --namespace=${NAMESPACE_ID}
Feedback mit KI-Funktionen analysieren
Die Spalte comment in der Tabelle customer_feedback enthält unstrukturierten Text, den Sie nicht direkt zusammenfassen oder verknüpfen können. Verwenden Sie BigQuery AI-Funktionen, um strukturierte Werte aus jedem Kommentar zu extrahieren und eine neue feedback_insights-Tabelle zu erstellen:
- Mit
AI.CLASSIFYwird jedem Kommentar eine Stimmung (positive,neutralodernegative) und ein primäres Thema (z. B.taste,texture,priceoderallergens) aus von Ihnen definierten Kategorielisten zugewiesen. AI.IFwertet für jeden Kommentar eine Bedingung in natürlicher Sprache aus und gibt einenBOOL-Wert zurück. In diesem Fall gibt der Wert an, ob der Kunde das Produkt noch einmal kaufen möchte.
Für diese verwalteten KI-Funktionen werden Ihre Nutzeranmeldedaten verwendet, um Gemini aufzurufen. Sie müssen also kein Remote-Modell oder keine Verbindung erstellen.
Erstellen Sie in Cloud Shell die Tabelle
feedback_insightsund füllen Sie sie:bq query --project_id=${PROJECT_ID} --location=${REGION} --use_legacy_sql=false << EOF CREATE TABLE \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.feedback_insights\` ( feedback_id INT64, flavor_name STRING, channel STRING, comment STRING, sentiment STRING, topic STRING, would_buy_again BOOL); INSERT INTO \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.feedback_insights\` SELECT feedback_id, flavor_name, channel, comment, AI.CLASSIFY( comment, categories => ['positive', 'neutral', 'negative']) AS sentiment, AI.CLASSIFY( comment, categories => ['taste', 'texture', 'price', 'allergens', 'availability', 'other']) AS topic, AI.IF( ('This customer says or implies that they would buy the product ', 'again. Comment: ', comment)) AS would_buy_again FROM \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.customer_feedback\`; EOF
Fassen Sie die Feedbackmesswerte für jede Variante zusammen:
bq query --project_id=${PROJECT_ID} --location=${REGION} --use_legacy_sql=false << EOF SELECT flavor_name, COUNT(*) AS comments, COUNTIF(sentiment = 'positive') AS positive, COUNTIF(would_buy_again) AS would_buy_again, ROUND(COUNTIF(sentiment = 'positive') / COUNT(*), 2) AS positive_share FROM \`${PROJECT_ID}.${CATALOG_ID}.${NAMESPACE_ID}.feedback_insights\` GROUP BY flavor_name ORDER BY positive_share DESC; EOF
Die Ausgabe sieht etwa so aus:
+-------------------+----------+----------+-----------------+----------------+ | flavor_name | comments | positive | would_buy_again | positive_share | +-------------------+----------+----------+-----------------+----------------+ | Strawberry Swirl | 4 | 3 | 2 | 0.75 | | Midnight Swirl | 6 | 4 | 3 | 0.67 | | Vanilla Bean | 4 | 2 | 2 | 0.5 | | Classic Chocolate | 6 | 2 | 3 | 0.33 | +-------------------+----------+----------+-----------------+----------------+
Nachfrage mit konversationeller Analyse vorhersagen
Mit der konversationellen Analyse in BigQuery Studio können Sie Ihre Iceberg-Tabellen in natürlicher Sprache analysieren. Es ruft Tabellenschemas aus dem Lakehouse-Laufzeitkatalog ab, generiert und führt BigQuery-SQL aus (einschließlich KI-Funktionen wie AI.FORECAST) und gibt Tabellen und Diagramme direkt im Chat zurück.
Unterhaltung mit Ihren Tabellen beginnen
Rufen Sie in der Google Cloud Console die BigQuery-Seite Agents auf.
Klicken Sie im BigQuery Studio-Editorbereich auf den Tab Agents, um den Unterhaltungsbereich zu öffnen, und klicken Sie dann auf Neuer Chat.
Klicken Sie im Bereich Chat starten, um mehr über Ihre Daten zu erfahren auf den Tab Wissensquellen. Suchen Sie im Feld Nach Quellen suchen nach Ihren drei Iceberg-Tabellen und wählen Sie sie aus. Verwenden Sie dazu die folgenden Werte. Ersetzen Sie
PROJECT_IDdurch Ihre Projekt-ID:PROJECT_ID.froyo_catalog.froyo_lakehouse.productsPROJECT_ID.froyo_catalog.froyo_lakehouse.feedback_insightsPROJECT_ID.froyo_catalog.froyo_lakehouse.sales_history
Klicken Sie auf Chat.
Fragen stellen, um die Nachfrage vorherzusagen und den Launch zu bewerten
Stellen Sie eine Reihe von Fragen in natürlicher Sprache, um die drei geschäftlichen Fragen für die Einführung von Midnight Swirl zu beantworten:
Geben Sie im Feld Eine Frage stellen den folgenden Prompt ein, um die Produktdetails und das Kundenfeedback von Midnight Swirl zu prüfen, und klicken Sie dann auf send_spark Senden:
Using products and feedback_insights, what are Midnight Swirl's allergens, base flavor, positive sentiment share, would_buy_again count, and customer concerns from negative or neutral comments?
Der Agent fragt beide Tabellen ab und meldet, dass Midnight Swirl auf Classic Chocolate basiert und Milch und Soja enthält. Außerdem wird ein Anteil von 0, 67 positiven Meinungen gemeldet. Drei von sechs Kunden beabsichtigen, das Produkt noch einmal zu kaufen. Es werden Bedenken hinsichtlich der Kennzeichnung von Sojaallergenen und der Bitterkeit von dunkler Schokolade geäußert.
Geben Sie den folgenden Prompt ein, um die Nachfrage für 12 Monate für die bestehenden Geschmacksrichtungen vorherzusagen, und klicken Sie dann auf send_spark Senden:
Forecast monthly sales by flavor for the next 12 months, plotting only the trend lines without confidence intervals.
Bei der Konversationsanalyse wird eine Abfrage mit
AI.FORECASTausgeführt, bei der das integrierte TimesFM-Modell in BigQuery ML verwendet wird, ohne dass ein separates Modell trainiert werden muss. Es wird ein Diagramm mit der 12-Monats-Prognose für jede Geschmacksrichtung angezeigt.Geben Sie den folgenden Prompt ein, um die Nachfrageprognose mit dem Kundenfeedback zu kombinieren und Empfehlungen für die Einführung zu erhalten, und klicken Sie dann auf send_spark Senden:
Join the total 12-month forecasted units_sold for each flavor with its positive sentiment share, would_buy_again count, and top complaint topics from feedback_insights, and recommend next steps for the Midnight Swirl launch.
Optional: Wenn Sie die generierte SQL-Abfrage prüfen oder die Begründungsschritte des Agents ansehen möchten, maximieren Sie Show thinking (Überlegungen anzeigen).
Hier können Sie Anschlussfragen in der Unterhaltung stellen, z. B. die Prognose nach Region aufschlüsseln, oder im Bereich Details auf Agent erstellen klicken, um einen wiederverwendbaren KI-Datenagenten zu speichern und mit Ihrem Team zu teilen.
Bereinigen
Damit Ihrem Google Cloud -Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.
Projekt löschen
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Einzelne Ressourcen löschen
Wenn Sie Ihr Projekt beibehalten möchten, löschen Sie die einzelnen Ressourcen, die Sie erstellt haben.
Wenn Sie Ihre Unterhaltung löschen möchten, wählen Sie im BigQuery Studio-Editorbereich den Tab KI-Agenten aus. Suchen Sie im linken Navigationsbereich, den Sie möglicherweise maximieren müssen, unter Letzte Chats nach der gewünschten Unterhaltung und klicken Sie dann auf more_vert Aktionen ansehen > Löschen.
Löschen Sie in Cloud Shell die vier Tabellen, den Namespace, den Katalog und den Cloud Storage-Bucket:
for TABLE in products sales_history customer_feedback feedback_insights; do gcloud biglake iceberg tables delete ${TABLE} \ --project=${PROJECT_ID} \ --catalog=${CATALOG_ID} \ --namespace=${NAMESPACE_ID} \ --quiet done gcloud biglake iceberg namespaces delete ${NAMESPACE_ID} \ --project=${PROJECT_ID} \ --catalog=${CATALOG_ID} \ --quiet gcloud biglake iceberg catalogs delete ${CATALOG_ID} \ --project=${PROJECT_ID} \ --quiet gcloud storage rm -r gs://${BUCKET_NAME}
Nächste Schritte
Weitere Informationen zum Arbeiten mit Ihren Lakehouse-Daten finden Sie in den folgenden Ressourcen:
- Weitere Informationen zum Abfragen von Iceberg-Tabellen in natürlicher Sprache mit der konversationellen Analyse in Lakehouse
- Sie können benutzerdefinierte Anweisungen, bestätigte Abfragen und Unternehmensglossare konfigurieren, indem Sie Daten-Agents in BigQuery erstellen.
- Mit Data Insights können Sie Beschreibungen und Abfragevorschläge für Ihre Tabellen generieren.
- Informationen zum Verwalten von Iceberg-Tabellen im Lakehouse-Laufzeitkatalog