Optimierung der Abfrageleistung
Swipe um das Menü anzuzeigen
Verstehen Sie materialisierte Sichten in BigQuery, eine leistungsstarke Funktion zur Optimierung der Abfrageleistung und zur Kostenkontrolle. Materialisierte Sichten speichern vorab berechnete Abfrageergebnisse und eignen sich ideal für Dashboards und Berichte, die häufig ausgeführt werden, aber keine Echtzeit-Aktualisierungen erfordern.
Was ist eine materialisierte Sicht
Eine materialisierte Sicht speichert das Ergebnis einer Abfrage als physische Tabelle:
- Sie wird automatisch basierend auf Änderungen in den zugrunde liegenden Daten aktualisiert;
- Aktualisierungsintervalle können konfiguriert werden, zum Beispiel alle 60 Minuten;
- Abfragen gegen eine materialisierte Sicht sind schneller und günstiger als Abfragen der Basistabelle.
Warum materialisierte Sichten verwenden
Materialisierte Sichten bieten mehrere wichtige Vorteile:
- Verbesserte Leistung durch Vermeidung wiederholter Berechnungen;
- Niedrigere Abfragekosten durch Reduzierung der gescannten Datenmenge;
- Automatische Abfrageoptimierung, wobei BigQuery nach Möglichkeit transparent die materialisierte Sicht anstelle der Basistabelle verwendet.
Erstellen einer materialisierten Sicht
Materialisierte Sichten werden mit CREATE MATERIALIZED VIEW und einer Standard-SELECT-Anweisung erstellt. Das Aktualisierungsverhalten wird über Konfigurationsoptionen gesteuert.
-- 1. Create a materialized view for sales analysis by user loyalty status
CREATE MATERIALIZED VIEW `codefinity-442016.codeFinity_test.mv_sales_by_loyalty`
OPTIONS(
enable_refresh = true,
refresh_interval_minutes = 60
) AS
SELECT
up.loyalty_status,
COUNT(DISTINCT ps.user_id) AS user_count,
COUNT(ps.sale_id) AS transaction_count,
SUM(ps.quantity) AS total_items_sold,
SUM(ps.quantity * ps.sale_price) AS total_revenue,
AVG(ps.sale_price) AS avg_price_per_unit,
MAX(PARSE_DATE('%Y-%m-%d', ps.sale_date)) AS last_sale_date
FROM
`codefinity-442016.codeFinity_test.product_sales_section4` ps
JOIN
`codefinity-442016.codeFinity_test.user_profile` up
ON ps.user_id = up.user_id
GROUP BY
up.loyalty_status;
-- 2. Query the materialized view for much faster results
SELECT
loyalty_status,
user_count,
transaction_count,
total_revenue,
total_revenue / transaction_count AS avg_transaction_value,
total_revenue / user_count AS revenue_per_user
FROM
`codefinity-442016.codeFinity_test.mv_sales_by_loyalty`
ORDER BY
total_revenue DESC;
Zu beachtende Einschränkungen
Materialisierte Sichten haben wichtige Einschränkungen:
- Bestimmte zustandsbehaftete Funktionen (wie
CURRENT_TIMESTAMP) sind nicht erlaubt; - Unterstützte Joins und Aggregationen sind auf deterministische Muster beschränkt;
- Die Basistabellen müssen sich im selben Dataset wie die materialisierte Sicht befinden.
Diese Einschränkungen sind bei der Gestaltung zu berücksichtigen, damit die Sicht weiterhin für automatische Aktualisierungen geeignet bleibt.
Beispiel
Ein Dashboard, das wöchentliche Verkaufsmetriken verfolgt, kann eine materialisierte Sicht anstelle der Rohtransaktionstabelle abfragen. Dies verbessert die Ladezeiten erheblich und hält die Daten dennoch ausreichend aktuell.
Wichtigste Erkenntnis
Materialisierte Sichten sind ein effektives Mittel, um BigQuery-Workloads zu skalieren und Kosten zu steuern. Sie eignen sich besonders für wiederkehrende Abfragen, Dashboards und Berichtsszenarien, bei denen nahezu Echtzeit-Aktualisierungen ausreichen.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen