BigQueryで多段ビューのキャッシュの挙動をみてみる
データアナリティクス事業本部の鈴木です。
今回はBigQueryで多段ビューを検索したときの、キャッシュの挙動について確認してみました。
BigQueryでは同じクエリを重複して実行すると、ユーザー別・プロジェクト別に保存されたキャッシュされた結果を利用することができます。
多段ビューは仕様の複雑化やパフォーマンスへの影響を招く可能性があるため、使う場面は選ばれますが、BigQueryではビューの検索結果もキャッシュされるため、選択肢の一つとして、どのような動きをするのか調べてみました。
準備
テーブル・ビューの作成
以下のようにテーブルとビューを作成します。
今回は3層になるようテーブルとビューを作ります。基本的に深い多段にはせず、ビューは2層程度までだろうと考え、合計3層で検証しました。
まず、あらかじめsample_dataset
という名前のデータセットを作っておき、テーブルを以下のように作りました。
CREATE TABLE sample_dataset.base_table ( id INTEGER, name STRING, price INTEGER ); INSERT sample_dataset.base_table (id, name, price) VALUES(1, 'Apple', 150), (2, 'Orange', 120), (3, 'Grape', 390);
続いてテーブルを参照する多段のビューを作成します。
CREATE VIEW sample_dataset.sample_view_1(id, name, price) AS SELECT id, name, price FROM sample_dataset.base_table; CREATE VIEW sample_dataset.sample_view_2(id, name, price) AS SELECT id, name, price FROM sample_dataset.sample_view_1;
データセットはこのようになります。
やってみる
2層目のビューのキャッシュの利用
まず、2層目のビューを検索してみます。
SELECT * FROM sample_dataset.sample_view_2 LIMIT 100;
クエリ結果
の実行の詳細
タブを確認すると、1回目は処理が行われていますが、2回目は-
になっていることが分かります。
1回目
2回目
特に2回目は、ジョブ情報
タブを開くと、処理されたバイト数
が0 B(キャッシュされた結果)
になっているため、キャッシュが使われていることが分かります。
2層目のビューのリフレッシュ
先の検索で2層目のビューはキャッシュがありますが、0層目のテーブルが更新された際に、リフレッシュされるか気になるので確認してみました。
テーブルに追加のデータをInsertしてみます。
INSERT sample_dataset.base_table (id, name, price) VALUES(4, 'Mango', 500);
テーブルはこのようになります。
この状態で2層目のビューで検索してみます。
SELECT * FROM sample_dataset.sample_view_2 LIMIT 100;
前回同様、1回目は処理されますが、2回目はキャッシュを利用されることが分かりました。
1回目
2回目
最後に
今回はBigQueryで多段ビューをしたときの、キャッシュの挙動を確認してみました。多段でもキャッシュされること、テーブルが更新された際にはリフレッシュされることが分かりました。