BI
2024/08/13
與田 龍人

BigQueryでマテリアライズドビューを試してみた

BigQueryでは、マテリアライズドビューを利用することで、クエリの実行速度を向上させることができます。マテリアライズドビューは、事前に計算されたデータを保存することで、複雑なクエリを効率的に実行できる機能です。本記事では、BigQueryに2つのテーブルを作成し、それらを結合・集計してマテリアライズドビューを作成する手順を解説します。

1. はじめに

BigQueryでは、マテリアライズドビューを利用することで、クエリの実行速度を向上させることができます。マテリアライズドビューは、事前に計算されたデータを保存することで、複雑なクエリを効率的に実行できる機能です。本記事では、BigQueryに2つのテーブルを作成し、それらを結合・集計してマテリアライズドビューを作成する手順を解説します。

2. テーブルの作成

まず、データセットに2つのベーステーブルを作成します。以下のSQLを実行して、sales_dataproduct_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_dataproduct_infoproduct_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を使用することで、売上データを完全に保持しつつ、関連する情報を取得することができます。ぜひ、日々のデータ分析にマテリアライズドビューを取り入れて、パフォーマンスの向上を図ってください。

New call-to-action