Optimering av Frågeprestanda
Svep för att visa menyn
Förstå materialiserade vyer i BigQuery, en kraftfull funktion för att optimera frågeprestanda och kontrollera kostnader. Materialiserade vyer lagrar förberäknade frågeresultat, vilket gör dem idealiska för instrumentpaneler och rapporter som körs ofta men inte kräver realtidsuppdateringar.
Vad är en materialiserad vy
En materialiserad vy lagrar resultatet av en fråga som en fysisk tabell:
- Uppdateras automatiskt baserat på förändringar i underliggande data;
- Uppdateringsintervall kan konfigureras, till exempel var 60:e minut;
- Frågor mot en materialiserad vy är snabbare och billigare än att fråga grundtabellen.
Varför använda materialiserade vyer
Materialiserade vyer ger flera viktiga fördelar:
- Förbättrad prestanda genom att undvika upprepad beräkning;
- Lägre frågekostnader genom att minska mängden skannad data;
- Automatisk frågeoptimering, där BigQuery kan använda materialiserade vyn istället för grundtabellen när det är möjligt.
Skapa en materialiserad vy
Materialiserade vyer skapas med CREATE MATERIALIZED VIEW och ett standard SELECT-uttryck. Uppdateringsbeteende styrs via konfigurationsalternativ.
-- 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;
Begränsningar att känna till
Materialiserade vyer har viktiga begränsningar:
- Vissa tillståndsberoende funktioner (som
CURRENT_TIMESTAMP) är inte tillåtna; - Stödda joins och aggregeringar är begränsade till deterministiska mönster;
- Grundtabellerna måste finnas i samma dataset som den materialiserade vyn.
Dessa begränsningar är viktiga att beakta vid utformning för att säkerställa att vyn förblir berättigad till automatisk uppdatering.
Exempel
En instrumentpanel som spårar veckovisa försäljningsmått kan fråga en materialiserad vy istället för den råa transaktionstabellen. Detta förbättrar laddningstiderna avsevärt samtidigt som datan hålls tillräckligt aktuell.
Viktig slutsats
Materialiserade vyer är ett effektivt sätt att skala BigQuery-arbetsbelastningar och hantera kostnader. De passar bäst för återkommande frågor, instrumentpaneler och rapporteringsscenarier där uppdateringar nära realtid är tillräckliga.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal