Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Optimalisatie van Queryprestaties | Geavanceerde BigQuery-Toepassingen en Optimalisatie
BigQuery Basisprincipes

bookOptimalisatie van Queryprestaties

Veeg om het menu te tonen

Begrijp gematerialiseerde views in BigQuery, een krachtig hulpmiddel voor het optimaliseren van queryprestaties en het beheersen van kosten. Gematerialiseerde views slaan vooraf berekende queryresultaten op, waardoor ze ideaal zijn voor dashboards en rapporten die vaak worden uitgevoerd maar geen realtime updates vereisen.

Wat is een gematerialiseerde view

Een gematerialiseerde view slaat het resultaat van een query op als een fysieke tabel:

  • Wordt automatisch vernieuwd op basis van wijzigingen in de onderliggende data;
  • Vernieuwingsintervallen kunnen worden geconfigureerd, bijvoorbeeld elke 60 minuten;
  • Queries op een gematerialiseerde view zijn sneller en goedkoper dan queries op de basistabel.

Waarom gematerialiseerde views gebruiken

Gematerialiseerde views bieden verschillende belangrijke voordelen:

  • Verbeterde prestaties door herhaalde berekeningen te vermijden;
  • Lagere querykosten door minder gescande data;
  • Automatische queryoptimalisatie, waarbij BigQuery mogelijk transparant de gematerialiseerde view gebruikt in plaats van de basistabel wanneer mogelijk.

Een gematerialiseerde view maken

Gematerialiseerde views worden gemaakt met CREATE MATERIALIZED VIEW en een standaard SELECT-statement. Het vernieuwingsgedrag wordt geregeld via configuratieopties.

-- 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;

Beperkingen om rekening mee te houden

Gematerialiseerde views hebben belangrijke beperkingen:

  • Bepaalde stateful functies (zoals CURRENT_TIMESTAMP) zijn niet toegestaan;
  • Ondersteunde joins en aggregaties zijn beperkt tot deterministische patronen;
  • De basistabellen moeten zich in dezelfde dataset bevinden als de gematerialiseerde view.

Deze beperkingen zijn belangrijk om mee te nemen in het ontwerp, zodat de view in aanmerking blijft komen voor automatische vernieuwing.

Voorbeeld

Een dashboard dat wekelijkse verkoopstatistieken bijhoudt, kan een gematerialiseerde view raadplegen in plaats van de ruwe transactietabel. Dit verbetert de laadtijden aanzienlijk terwijl de data redelijk actueel blijft.

Belangrijkste inzicht

Gematerialiseerde views zijn een effectieve manier om BigQuery-werklasten op te schalen en kosten te beheren. Ze zijn het meest geschikt voor terugkerende queries, dashboards en rapportagescenario's waarbij near-realtime updates voldoende zijn.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 4. Hoofdstuk 1
some-alt