Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Auf dieser Seite wird beschrieben, wie Sie basierend auf Ihren Abfragemustern zwischen aggregierten und nicht aggregierten Materialisierungen für Metrikansichten auswählen. Informationen dazu, was jeder Typ ist und wie er funktioniert, finden Sie unter Typen von Materialisierungen für Metrikansichten.For what each type is and how it works, see Types of materializations for metric views.
Verwenden Sie die folgende Tabelle, um den richtigen Ansatz für Ihre Situation zu finden. Die folgenden Abschnitte beantworten jede Frage im Detail.
| Ihre Situation | Approach |
|---|---|
| Sie führen dieselben Abfragemuster häufig aus und wissen, nach welchen Dimensionen Sie gruppieren. | Aggregierte Materialisierung |
Sie fragen eine nicht additive Kennzahl wie COUNT(DISTINCT) mit einer festen Granularität ab. |
Aggregierte Materialisierung mit Dimensionen, die mit der Abfrage übereinstimmen GROUP BY |
Sie führen Ad-hoc-Abfragen für verknüpfte oder gefilterte Daten aus und können die GROUP BY nicht vorhersagen. |
Nicht aggregierte Materialisierung |
| Sie haben sowohl vorhersehbare Dashboards als auch Ad-hoc-Abfragen in derselben Metrikansicht. | Beide Typen zusammen |
| Ihre Metrikansicht verweist auf eine einzelne Tabelle ohne Verknüpfungen oder Filter. | Keines; Aggregierte Materialisierungen für bekannte Muster verwenden oder Materialisierung überspringen |
Aggregierte Materialisierungen
Eine aggregierte Materialisierung ist eine vordefinierte Antworttabelle für einen bestimmten Fragetyp. Es dient schneller zum Abgleichen von Abfragen, indem vorab berechnete Ergebnisse zurückgegeben werden, anstatt Quelldaten zu scannen.
In den folgenden Beispielen wird eine metrische Ansicht von Verkaufsdaten mit den Feldern region, category und order_date sowie den Kennzahlen total_revenue (SUM), order_count (COUNT) und unique_customers (COUNT(DISTINCT)) verwendet.
Wie kann ich eine Häufig ausgeführte Abfrage beschleunigen?
Erstellen Sie eine aggregierte Materialisierung dafür. Eine abfrage, die Sie täglich ausführen, ist ein guter Kandidat, da die Materialisierung vorab berechnete Ergebnisse zurückgibt, anstatt die Quelldaten zu scannen. Angenommen, Sie führen diese Abfrage jeden Morgen aus:
SELECT region, MEASURE(total_revenue) FROM sales_mv GROUP BY ALL
Wenn Sie region und order_date häufig zusammen abfragen, nehmen Sie beide Felder in eine Materialisierung auf:
- name: revenue_by_region_date
type: aggregated
dimensions:
- region
- order_date
measures:
- total_revenue
- order_count
Die Materialisierung auf einer feineren Granularität (Region und Datum statt nur Region) bedeutet, dass jede Abfrage, die nur nach region , nur nach order_date oder nach beiden gruppiert, diese Materialisierung verwenden kann. Das Einbeziehen additiver Measures wie order_count ermöglicht, dass dieselbe Materialisierung Abfragen für diese Measures bedient, sodass Sie nicht für jede einzelne eine separate Materialisierung erstellen müssen.
Wie kann ich feststellen, ob eine vorhandene Materialisierung eine neue Abfrage abdeckt?
Vergleichen Sie die Dimensionen der Abfrage GROUP BY mit den Dimensionen der Materialisierung. Wenn die Materialisierung keine Dimension enthält, nach der Sie gruppieren, kann die Abfrage sie nicht verwenden. Zum Beispiel angenommen, Sie möchten den Umsatz nach category, aber Ihre einzige Materialisierung ist das zuvor gezeigte revenue_by_region_date-Beispiel. Da category nicht enthalten ist, greifen Abfragen, die nach category gruppieren, auf eine nicht aggregierte Materialisierung (sofern vorhanden) oder auf die Quelltabellen zurück.
Wenn Sie häufig nach category abfragen, erstellen Sie dafür eine separate Materialisierung. Wenn die Abfrage selten oder bereits schnell genug ist, erstellen Sie keine. Jede Materialisierung fügt Speicher- und Aktualisierungskosten hinzu.
Wie kann ich eine Abfrage mit einer nicht-additiven Kennzahl beschleunigen?
Erstellen Sie eine aggregierte Materialisierung, deren Dimensionen exakt mit der Abfrage GROUP BY übereinstimmen. Nicht additive Kennzahlen wie COUNT(DISTINCT) lassen sich nicht aus einer feiner granularen Materialisierung aggregieren, daher hilft eine Materialisierung mit einem anderen Granularitätsgrad nicht. Angenommen, diese Abfrage ist langsam:
SELECT region, MEASURE(unique_customers) FROM sales_mv GROUP BY ALL
unique_customers verwendet COUNT(DISTINCT), was nicht additiv ist. Die revenue_by_region_date zuvor gezeigte Materialisierung weist unterschiedliche Dimensionen auf, sodass sie diese Abfrage nicht bedienen kann. Erstellen Sie eine Materialisierung mit Dimensionen, die übereinstimmen:
- name: customers_by_region
type: aggregated
dimensions:
- region
measures:
- unique_customers
Nicht aggregierte Materialisierungen
Eine nicht aggregierte Materialisierung ist ein vordefinierter Ausgangspunkt, keine vordefinierte Antwort. Es führt die kostspielige Arbeit des Verknüpfens von Tabellen und das Anwenden von Filtern einmal aus, sodass Abfragen aus dem verknüpften Ergebnis aggregiert werden können, anstatt die Quelltabellen bei jeder Ausführung neu zu verknüpfen.
Aggregation erfolgt immer noch zur Abfragezeit, sodass nicht aggregierte Materialisierungen nicht so schnell wie aggregierte sind. Sie sind schneller als das erneute Verknüpfen aus den Rohquelltabellen für jede Abfrage.
In den folgenden Beispielen wird eine Metrikansicht verwendet, die drei Tabellen verknüpft und einen Filter anwendet:
source: raw_events
filter: event_type = 'purchase'
joins:
- name: customers
source: dim_customers
on: customers.id = source.customer_id
- name: products
source: dim_products
on: products.id = source.product_id
Welchen Typ sollte ich für unvorhersehbare Abfragemuster verwenden?
Verwenden Sie eine nicht aggregierte Materialisierung. Wenn Sie Ad-hoc-Abfragen ständig ausführen und dies GROUP BYnicht vorhersagen können, ist es schwierig, aggregierte Materialisierungen zu definieren, die die richtigen Felder abdecken. Eine nicht aggregierte Materialisierung umgeht dieses Problem: Sie materialisiert den verknüpften, gefilterten Datensatz einmal, und jede Abfrage kann ihn unabhängig von seiner Struktur verwenden.
materialized_views:
- name: baseline
type: unaggregated
Sollte ich eine einzelne Tabelle ohne Verknüpfungen materialisieren?
Eine nicht aggregierte Materialisierung für eine einzelne Tabelle ohne Verknüpfungen oder Filter dupliziert die Tabelle ohne Vorteile. Verwenden Sie aggregierte Materialisierungen für bekannte Abfragemuster, oder überspringen Sie die Materialisierung vollständig.
Kann ich beide Materialisierungstypen zusammen verwenden?
Ja. Verwenden Sie eine nicht aggregierte Materialisierung als Fallback und aggregierte Materialisierungen für Ihre bekannten Abfragen mit hohem Datenverkehr. Dieses Muster passt zu einer Metrikansicht, die teure Verknüpfungen zusammen mit einem Dashboard bekannter Widgets enthält. Die Abfrageumschreibung bevorzugt nach Möglichkeit aggregierte Materialisierungen (genaue oder Rollup-Übereinstimmungen) und greift in allen anderen Fällen auf nicht aggregierte Materialisierungen zurück.
materialized_views:
- name: baseline
type: unaggregated
- name: revenue_by_region_date
type: aggregated
dimensions:
- region
- order_date
measures:
- total_revenue
Wenn Sie Materialisierungen erstellen, konzentrieren Sie sich zuerst auf Ihre langsamsten oder am häufigsten ausgeführten Abfragen. Fügen Sie weitere Materialisierungen hinzu, wenn Sie beobachten, dass Abfragen auf die Quelle zurückfallen. Informationen dazu, ob eine Abfrage eine Materialisierung verwendet, finden Sie unter Überprüfen, ob eine Abfrage materialisierte Ansichten verwendet.