Optimalisatie 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.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.