Оптимізація Продуктивності Запитів
Свайпніть щоб показати меню
Ознайомтеся з матеріалізованими поданнями в BigQuery — потужною функцією для оптимізації продуктивності запитів і контролю витрат. Матеріалізовані подання зберігають попередньо обчислені результати запитів, що робить їх ідеальними для інформаційних панелей і звітів, які виконуються часто, але не потребують оновлення в реальному часі.
Що таке матеріалізоване подання
Матеріалізоване подання зберігає результат запиту як фізичну таблицю:
- Оновлюється автоматично при зміні вихідних даних;
- Інтервали оновлення можна налаштовувати, наприклад, кожні 60 хвилин;
- Запити до матеріалізованого подання виконуються швидше та дешевше, ніж до базової таблиці.
Навіщо використовувати матеріалізовані подання
Матеріалізовані подання мають кілька ключових переваг:
- Підвищення продуктивності за рахунок уникнення повторних обчислень;
- Зниження вартості запитів завдяки зменшенню обсягу сканованих даних;
- Автоматична оптимізація запитів, коли BigQuery може прозоро використовувати матеріалізоване подання замість базової таблиці, якщо це можливо.
Створення матеріалізованого подання
Матеріалізовані подання створюються за допомогою CREATE MATERIALIZED VIEW і стандартного оператора SELECT. Поведінка оновлення контролюється через параметри конфігурації.
-- 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;
Обмеження, про які слід пам’ятати
Матеріалізовані подання мають важливі обмеження:
- Деякі стано-залежні функції (наприклад,
CURRENT_TIMESTAMP) не дозволені; - Підтримувані об’єднання та агрегації обмежені детермінованими шаблонами;
- Базові таблиці повинні знаходитися в тому ж наборі даних, що й матеріалізоване подання.
Ці обмеження важливо враховувати під час проєктування, щоб забезпечити можливість автоматичного оновлення подання.
Приклад
Інформаційна панель, яка відстежує щотижневі показники продажів, може виконувати запити до матеріалізованого подання замість сирої таблиці транзакцій. Це значно покращує час завантаження, зберігаючи при цьому достатню актуальність даних.
Основний висновок
Матеріалізовані подання — ефективний спосіб масштабування робочих навантажень у BigQuery та управління витратами. Вони найкраще підходять для повторюваних запитів, інформаційних панелей і звітних сценаріїв, де достатньо майже актуальних оновлень.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат