BigQuery クエリ性能改善: Primary key の削除、変更方法
本記事は、BigQuery の主キーと外部キーにより、クエリの性能改善が得られるかどうか検証してみたの検証の一部になります。
BigQuery テーブルに Primary key を設定する場合、 CREATE TABLE ステートメント、追加する場合は ALTER TABLE ADD PRIMARY KEY ステートメントを使用すれば良いことは、比較的容易にわかります。
ただ、削除と変更方法は少しづらかったので、実際に試して確認してみます。
1. データセット・テーブルの準備
pk_drop_test
テーブルを作成します。それぞれ id
カラムを PK に設定します。
-- データセット作成
CREATE SCHEMA IF NOT EXISTS pk_fk_dataset;
-- Primary key を設定したテーブルを作成
CREATE OR REPLACE TABLE pk_fk_dataset.pk_drop_test(
id INT64,
value INT64,
PRIMARY KEY(id) NOT ENFORCED
);
2. Primary key 削除
下記 2 つの方法で Primary key を変更できることを確認します。
(それぞれ実施するときはテーブルを初期状態に戻しておきます。)
2.1. ALTER TABLE DROP PRIMARY KEY ステートメントを使用
下記 SQLで、Primary key を削除します。
ALTER TABLE pk_fk_dataset.pk_drop_test DROP PRIMARY KEY;
pk_drop_test
テーブルを見ると、PK が削除されていることを確認できました。
2.2. ALTER TABLE DROP CONSTRAINT ステートメントを使用
下記 SQL で、pk_drop_test
テーブルに設定された PK の制約名を確認します。
SELECT *
FROM pk_fk_dataset.INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE table_name = 'pk_drop_test';
constraint_name
から、制約名が pk_drop_test.pk$
(または、pk$
) であることが確認できました。
次に、下記 SQLでこの制約を削除します。
ALTER TABLE pk_fk_dataset.pk_drop_test DROP CONSTRAINT `pk_drop_test.pk$`;
pk_drop_test
テーブルを見ると、PK が削除されていることを確認できました。
また、制約名の部分を pk$
にしても削除可能です。
ALTER TABLE pk_fk_dataset.pk_drop_test DROP CONSTRAINT `pk$`;
3. Primary key 変更
下記 2つの方法で Primary key を変更できることを確認します。
- ALTER TABLE ステートメント (ALTER TABLE DROP PRIMARY KEY ステートメントと ALTER TABLE ADD PRIMARY KEY ステートメント) を使用
- テーブル再作成
(それぞれ実施するときはテーブルを初期状態に戻しておきます。)
3.1. ALTER TABLE ステートメントを使用
下記 SQL で、PK を id
だけから、id
と value
に変更します。
ALTER TABLE pk_fk_dataset.pk_drop_test DROP PRIMARY KEY;
ALTER TABLE pk_fk_dataset.pk_drop_test ADD PRIMARY KEY (id, value) NOT ENFORCED;
pk_drop_test
テーブルを見ると、PK が id
と value
に変更されていることを確認できました。
3.2. テーブル再作成
下記 SQLで、pk_drop_test
テーブルを再作成します。
CREATE OR REPLACE TABLE pk_fk_dataset.pk_drop_test(
id INT64,
value INT64,
PRIMARY KEY(id, value) NOT ENFORCED
);
pk_drop_test
テーブルを見ると、PK が id
と value
に変更されていることを確認できました。
4. まとめ
本記事では、実際に試して Primary key の削除・変更方法を確認しました。設定・追加・削除・変更方法をまとめると次のようになります。
- 設定方法
- CREATE TABLE ステートメントを使用する。
- 追加方法
- 削除方法
- 変更方法
- ALTER TABLE DROP PRIMARY KEY ステートメントと ALTER TABLE ADD PRIMARY KEY ステートメントを使用する。
- テーブルを再作成する。
Discussion