Een materialisatietype kiezen voor metrische weergaven

Op deze pagina wordt beschreven hoe u kunt kiezen tussen geaggregeerde en niet-samengevoegde materialisaties voor metrische weergaven op basis van uw querypatronen. Zie Typen materialisaties voor metrische weergaven voor informatie over wat elk type is en hoe het werkt.

Gebruik de volgende tabel om de juiste aanpak voor uw situatie te vinden. De secties die volgen, beantwoorden elke vraag in detail.

Uw situatie Approach
U voert dezelfde querypatronen vaak uit en weet op welke dimensies u groepeer. Geaggregeerde materialisatie
U voert een query uit op een niet-additieve meting, zoals COUNT(DISTINCT), op een vaste korrel. Geaggregeerde materialisatie met dimensies die overeenkomen met de query's GROUP BY
U voert ad-hocquery's uit op gekoppelde of gefilterde gegevens en u kunt het GROUP BYniet voorspellen. Niet-geaggregeerde materialisatie
U hebt zowel voorspelbare dashboards als ad-hocquery's in dezelfde metrische weergave. Beide typen samen
Uw metrische weergave wijst naar één tabel zonder koppelingen of filters. Geen van beide; geaggregeerde materialisaties gebruiken voor bekende patronen of materialisatie overslaan

Geaggregeerde materialisaties

Een geaggregeerde materialisatie is een vooraf gebouwde antwoordtabel voor een specifiek type vraag. Het levert sneller overeenkomende query's op door vooraf berekende resultaten te retourneren in plaats van brongegevens te scannen.

In de volgende voorbeelden wordt een metrische weergave van verkoopgegevens gebruikt met de velden region, category en order_date, en de meetwaarden total_revenue (SUM), order_count (COUNT) en unique_customers (COUNT(DISTINCT)).

Hoe kan ik een query die ik regelmatig uitvoer versnellen?

Maak er een geaggregeerde materialisatie voor. Een query die u dagelijks uitvoert, is een goede kandidaat, omdat de materialisatie vooraf berekende resultaten retourneert in plaats van de brongegevens te scannen. Stel dat u deze query elke ochtend uitvoert:

SELECT region, MEASURE(total_revenue) FROM sales_mv GROUP BY ALL

Als u region en order_date vaak samen opvraagt, neemt u beide velden op in één materialisatie:

- name: revenue_by_region_date
  type: aggregated
  dimensions:
    - region
    - order_date
  measures:
    - total_revenue
    - order_count

Materialiseren op een fijnmaziger niveau (regio en datum in plaats van alleen regio) betekent dat elke querygroepering op region alleen, op order_date alleen, of op beide deze materialisatie kan gebruiken. Door additieve maatstaven zoals order_count op te nemen, kan dezelfde materialisatie ook worden gebruikt voor query’s voor die maatstaven, zodat u niet voor elke maatstaf een aparte materialisatie hoeft te maken.

Hoe weet ik of een bestaande materialisatie betrekking heeft op een nieuwe query?

Vergelijk de afmetingen van GROUP BY de query met de afmetingen van de materialisatie. Als de materialisatie geen dimensie bevat waarop u groepeer, kan de query deze niet gebruiken. Stel bijvoorbeeld dat u omzet uitgesplitst naar category wilt, maar de enige materialisatie die u hebt, het eerder getoonde voorbeeld revenue_by_region_date is. Omdat dit category niet bevat, vallen query's die groeperen op category terug op een niet-geaggregeerde materialisatie (als die bestaat) of op de brontabellen.

Als u vaak query's uitvoert op basis van category, maak er dan een aparte materialisatie voor. Als de query niet vaak of al snel genoeg is, maakt u er geen. Bij elke materialisatie worden opslag- en vernieuwingskosten toegevoegd.

Hoe kan ik een query versnellen met een niet-additieve meting?

Maak een geaggregeerde materialisatie waarvan de dimensies exact overeenkomen met de query GROUP BY . Niet-additieve maatstaven, zoals COUNT(DISTINCT), kunnen niet worden geaggregeerd vanuit een fijnmazigere materialisatie, dus helpt een materialisatie op een ander granulariteitsniveau niet. Stel dat deze query traag is:

SELECT region, MEASURE(unique_customers) FROM sales_mv GROUP BY ALL

unique_customers gebruikt COUNT(DISTINCT), wat niet-additief is. De revenue_by_region_date eerder getoonde materialisatie heeft verschillende dimensies, zodat deze query niet kan worden uitgevoerd. Maak een materialisatie met dimensies die overeenkomen met:

- name: customers_by_region
  type: aggregated
  dimensions:
    - region
  measures:
    - unique_customers

Niet-samengevoegde materialisaties

Een niet-samengevoegde materialisatie is een vooraf gebouwd uitgangspunt, niet een vooraf gebouwd antwoord. Het voert het dure werk uit van het samenvoegen van tabellen en het toepassen van filters eenmaal, zodat query's kunnen worden samengevoegd vanuit het samengevoegde resultaat in plaats van de brontabellen opnieuw te koppelen bij elke uitvoering.

Aggregatie vindt nog steeds plaats op het moment van de query, dus niet-geaggregeerde materialisaties zijn niet zo snel als geaggregeerde materialisaties. Ze zijn sneller dan opnieuw samenvoegen vanuit de onbewerkte brontabellen voor elke query.

In de volgende voorbeelden wordt een metrische weergave gebruikt waarmee drie tabellen worden samengevoegd en een filter wordt toegepast:

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

Welk type moet ik gebruiken voor onvoorspelbare querypatronen?

Gebruik een niet-samengevoegde materialisatie. Wanneer u voortdurend ad-hocquery's uitvoert en de GROUP BYresultaten niet kunt voorspellen, is het moeilijk om geaggregeerde materialisaties te definiëren die betrekking hebben op de juiste velden. Een niet-geaggregeerde materialisatie omzeilt dit probleem: de samengevoegde, gefilterde dataset wordt één keer gematerialiseerd en kan door elke query worden gebruikt, ongeacht de structuur.

materialized_views:
  - name: baseline
    type: unaggregated

Moet ik één tabel zonder joins materialiseren?

Een niet-samengevoegde materialisatie van één tabel zonder joins of filters dupliceert de tabel zonder enig voordeel. Gebruik geaggregeerde materialisaties voor bekende querypatronen of sla de materialisatie volledig over.

Kan ik beide materialisatietypen samen gebruiken?

Ja. Gebruik een niet-geaggregeerde materialisatie als een terugval en geaggregeerde materialisaties voor uw bekende query's met veel verkeer. Dit patroon past bij een metrische weergave met dure joins, samen met een dashboard met bekende widgets. Query-herschrijving geeft waar mogelijk de voorkeur aan geaggregeerde materialisaties (exacte of rollup-overeenkomst) en valt voor alle overige gevallen terug op niet-geaggregeerde materialisaties.

materialized_views:
  - name: baseline
    type: unaggregated
  - name: revenue_by_region_date
    type: aggregated
    dimensions:
      - region
      - order_date
    measures:
      - total_revenue

Bij het aanmaken van materialisaties richt u zich eerst op uw langzaamste of meest gebruikte query's. Voeg meer materialisaties toe wanneer u ziet dat query's terugvallen op de gegevensbron. Raadpleeg Controleren of een query gebruikmaakt van gematerialiseerde weergaven om na te gaan of een query gebruikmaakt van materialisatie.