{GCP BigQuery}キャッシュに保存されているクエリ結果を使用する

https://cloud.google.com/bigquery/docs/cached-results?hl=ja


インタラクティブ クエリとバッチクエリの両方を含むすべてのクエリの結果は、一部の例外を除いて、一時テーブルに約 24 時間キャッシュされます。

同じクエリを重複して実行すると、BigQuery はキャッシュに保存された結果を再利用しようとします。
キャッシュからデータを取得するには、重複するクエリテキストを元のクエリと同じにする必要があります。

クエリを実行すると、一時的なキャッシュ結果テーブルは「匿名データセット」と呼ばれる特別なデータセットに作成されます。

キャッシュに保存された結果を使用したクエリは、課金の対象となりません


-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-southeast1 --quiet
gcloud config set compute/zone asia-southeast1-a --quiet

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999

gcloud components update


-- 2. BigQuery API有効化

gcloud services list --enabled


gcloud services enable bigquery.googleapis.com \
--project project01-9999999

 

-- 3. BigQueryデータセットを作成する

CREATE SCHEMA ds01;

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
order by schema_name
;

 


-- 4. テストテーブルの作成


CREATE TABLE ds01.tab1
(
  col1 NUMERIC
, col2 STRING
)
;

select * from ds01.INFORMATION_SCHEMA.TABLES
order by table_name
;

SELECT *
FROM ds01.INFORMATION_SCHEMA.COLUMNS
order by table_name,column_name
;

insert into ds01.tab1 values(1,'A');


select * from ds01.tab1;

→処理されたバイト数 = 19 B

select * from ds01.tab1;

→処理されたバイト数 = 0 B(キャッシュされた結果)

select col1,col2 from ds01.tab1;

→処理されたバイト数 = 19 B
SQL文を変更したため、キャッシュは使用されなかった

select col1,col2 from ds01.tab1;

→処理されたバイト数 = 0 B(キャッシュされた結果)

update ds01.tab1 set col2 = 'B' where col1 = 1;

select * from ds01.tab1;
→処理されたバイト数 = 19 B

select * from ds01.tab1;
→処理されたバイト数 = 0 B(キャッシュされた結果)
→データを更新したため、キャッシュは使用されなかった


-- 5. キャッシュされた結果の取得を無効にしてクエリジョブの実行評価を強制的に行う

bq help query

bq query \
--nouse_legacy_sql \
--nouse_cache \
--batch \
'select col2 from ds01.tab1 where col1 = 1;'

 

-- 6. クエリ キャッシュからの結果を要求する

bq query \
--nouse_legacy_sql \
--require_cache \
--batch \
'select col2 from ds01.tab1 where col1 = 1;'

→ BigQuery error in query operation: Error processing job
'project01-9999999:bqjob_r6a4ab0c23ff4befa_00000123f990012d_1': Not found: Table project01-9999999:_
217a8d9069c4c18ec8f34440139949f331e9235b.anon0f848cd8cd9470cf1c84fc17a1d1033b7dc96d4a10a7f39255f71bb
df816a05e was not found in location US


bq query \
--nouse_legacy_sql \
--batch \
'select col2 from ds01.tab1 where col1 = 1;'


bq query \
--nouse_legacy_sql \
--require_cache \
--batch \
'select col2 from ds01.tab1 where col1 = 1;'

 

-- 7. クリーンアップ

 

gcloud projects list

gcloud projects delete project01-9999999 \
--quiet