BigQuery BI Engine provides an in-memory analysis service that caches results of frequent and predictable queries, reducing the need to scan data in BigQuery storage and thereby lowering query costs. By serving cached results directly from memory, BI Engine avoids repeated data processing and slot consumption for recurring queries.
Option B is correct because materialized views allow you to pre-compute and store the results of common aggregations. When you query a materialized view, BigQuery uses the pre-computed results instead of scanning the base tables, which reduces the amount of data processed and thus lowers query costs, especially for frequent, predictable aggregations.
Option D is correct because clustering tables on frequently filtered columns can significantly reduce the amount of data scanned by queries that filter on those columns. By organizing data based on the clustering columns, BigQuery can efficiently prune partitions and only scan relevant blocks. This reduces the bytes billed for each query, leading to cost savings for frequent, predictable queries with filtering predicates.
Option C is incorrect because partitioning by ingestion time is primarily used for managing data lifecycle and improving query performance on time-based ranges, but it does not directly address cost reduction for frequent, predictable queries. While it can reduce scanned data for time-range queries, it is not as targeted as the other strategies for predictable, repeated access patterns.
Option E is incorrect because using DML statements to pre-aggregate data would require additional processing and storage costs for the aggregated tables, and the queries against those tables would still incur costs. This approach does not inherently reduce query costs compared to using materialized views or BI Engine, and it adds complexity and maintenance overhead.