Optimalisering av Spørringsytelse
Sveip for å vise menyen
Forstå materialiserte visninger i BigQuery, en kraftig funksjon for å optimalisere spørringsytelse og kontrollere kostnader. Materialiserte visninger lagrer forhåndsberegnede spørringsresultater, noe som gjør dem ideelle for dashbord og rapporter som kjøres ofte, men som ikke krever sanntidsoppdateringer.
Hva er en materialisert visning
En materialisert visning lagrer resultatet av en spørring som en fysisk tabell:
- Den oppdateres automatisk basert på endringer i underliggende data;
- Oppdateringsintervaller kan konfigureres, for eksempel hver 60. minutt;
- Spørringer mot en materialisert visning er raskere og billigere enn å spørre grunnlagetabellen.
Hvorfor bruke materialiserte visninger
Materialiserte visninger gir flere viktige fordeler:
- Bedre ytelse ved å unngå gjentatt beregning;
- Lavere spørringskostnader ved å redusere mengden skannet data;
- Automatisk spørringsoptimalisering, der BigQuery kan bruke materialiserte visninger i stedet for grunnlagetabellen når det er mulig.
Opprette en materialisert visning
Materialiserte visninger opprettes med CREATE MATERIALIZED VIEW og en standard SELECT-setning. Oppdateringsatferd styres gjennom konfigurasjonsalternativer.
-- 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;
Begrensninger du bør være oppmerksom på
Materialiserte visninger har viktige begrensninger:
- Enkelte tilstandsbaserte funksjoner (som
CURRENT_TIMESTAMP) er ikke tillatt; - Støttede join- og aggregeringsmønstre er begrenset til deterministiske mønstre;
- Grunnlagetabellene må være i samme datasett som den materialiserte visningen.
Disse begrensningene er viktige å ta hensyn til under utforming for å sikre at visningen forblir kvalifisert for automatisk oppdatering.
Eksempel
Et dashbord som sporer ukentlige salgsmetrikker kan spørre en materialisert visning i stedet for den rå transaksjonstabellen. Dette forbedrer lastetiden betydelig, samtidig som dataene holdes tilstrekkelig oppdaterte.
Viktig å huske
Materialiserte visninger er en effektiv måte å skalere BigQuery-arbeidsbelastninger og håndtere kostnader på. De egner seg best for gjentakende spørringer, dashbord og rapporteringsscenarier der nesten sanntidsoppdateringer er tilstrekkelig.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår