BigQueryでマテリアライズドビューを試してみた
BigQueryでは、マテリアライズドビューを利用することで、クエリの実行速度を向上させることができます。マテリアライズドビューは、事前に計算されたデータを保存することで、複雑なクエリを効率的に実行できる機能です。本記事では、BigQueryに2つのテーブルを作成し、それらを結合・集計してマテリアライズドビューを作成する手順を解説します。
1. はじめに
BigQueryでは、マテリアライズドビューを利用することで、クエリの実行速度を向上させることができます。マテリアライズドビューは、事前に計算されたデータを保存することで、複雑なクエリを効率的に実行できる機能です。本記事では、BigQueryに2つのテーブルを作成し、それらを結合・集計してマテリアライズドビューを作成する手順を解説します。
2. テーブルの作成
まず、データセットに2つのベーステーブルを作成します。以下のSQLを実行して、sales_dataとproduct_infoの2つのテーブルを作成します。
-- sales_dataテーブルの作成
CREATE OR REPLACE TABLE `data-sandbox-421715.test_dataset.sales_data` (
sale_id INT64,
product_id INT64,
quantity INT64,
sale_amount INT64
);
INSERT INTO `data-sandbox-421715.test_dataset.sales_data` (sale_id, product_id, quantity, sale_amount) VALUES
(1, 101, 5, 1000),
(2, 102, 3, 600),
(3, 101, 2, 400);
-- product_infoテーブルの作成
CREATE OR REPLACE TABLE `data-sandbox-421715.test_dataset.product_info` (
product_id INT64,
product_name STRING
);
INSERT INTO `data-sandbox-421715.test_dataset.product_info` (product_id, product_name) VALUES
(101, 'Product A'),
(102, 'Product B');
このSQLでは、sales_dataテーブルに売上データを、product_infoテーブルに製品情報を簡潔に格納します。
3. テーブルの結合と集計
まずは通常の結合集計を行います。上記で作成した2つのテーブルをLEFT JOINで結合し、売上額の合計を製品ごとに集計するクエリを作成します。
SELECT
p.product_id,
p.product_name,
SUM(s.sale_amount) AS total_sales
FROM
`data-sandbox-421715.test_dataset.sales_data` s
LEFT JOIN
`data-sandbox-421715.test_dataset.product_info` p
ON
s.product_id = p.product_id
GROUP BY
p.product_id, p.product_name;
このクエリでは、
sales_data
とproduct_info
をproduct_id
でLEFT JOINし、各製品の売上額の合計を集計します。LEFT JOINを使うことで、sales_data
に存在するすべてのレコードが結果に含まれます。
4. マテリアライズドビューの作成
上記のクエリを元に、マテリアライズドビューを作成します。以下のSQLを実行して、product_sales_mv
というマテリアライズドビューを作成します。
CREATE MATERIALIZED VIEW `data-sandbox-421715.test_dataset.product_sales_mv` AS
SELECT
p.product_id,
p.product_name,
SUM(s.sale_amount) AS total_sales
FROM
`data-sandbox-421715.test_dataset.sales_data` s
LEFT JOIN
`data-sandbox-421715.test_dataset.product_info` p
ON
s.product_id = p.product_id
GROUP BY
p.product_id, p.product_name;
このマテリアライズドビューにより、製品ごとの売上額が事前に計算され、クエリの実行速度が大幅に向上します。
5. マテリアライズドビューの活用
マテリアライズドビューを利用して、素早く集計データを取得することができます。以下のクエリを実行して、product_sales_mvからデータを取得します。
SELECT * FROM `data-sandbox-421715.test_dataset.product_sales_mv`;
これにより、各製品の売上合計が高速に返されます。
6. まとめ
BigQueryのマテリアライズドビューを活用することで、複雑な集計クエリを効率的に実行できるようになります。LEFT JOINを使用することで、売上データを完全に保持しつつ、関連する情報を取得することができます。ぜひ、日々のデータ分析にマテリアライズドビューを取り入れて、パフォーマンスの向上を図ってください。