https://cloud.google.com/bigquery/docs/reference/standard-sql/transactions?hl=ja
https://dev.classmethod.jp/articles/bigquery-mutistatement-transaction-ga/
トランザクションは、ACID 特性を保証し、スナップショット分離をサポートします。
トランザクションの実行中、すべての読み取りはトランザクション内で参照されるテーブルについて整合性のあるスナップショットを返します。
トランザクション内のステートメントでテーブルが変更されると、同じトランザクション内の後続のステートメントにその変更内容が反映されます。
あるトランザクションでテーブル内の行が変更(更新または削除)された場合、
同じテーブル内の行を変更する他のトランザクションまたは DML ステートメントを同時に実行することはできません。
競合するトランザクションはキャンセルされます。
-- 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データセットを作成する
bq mk ds01
bq ls
-- 4. テスト用テーブル、データの作成(コンソールから実行)
drop table ds01.tab1;
create table ds01.tab1
(
col1 INT
, col2 STRING
);
insert into ds01.tab1 values(1,'1');
select * from ds01.tab1 order by col1;
select * from ds01.INFORMATION_SCHEMA.TABLES;
-- 5. 動作確認(コンソールとターミナルから実行)
BEGIN TRANSACTION;
insert into ds01.tab1 values(2,'2');
select * from ds01.tab1 order by col1;
COMMIT TRANSACTION;
BEGIN TRANSACTION;
insert into ds01.tab1 values(3,'3');
select * from ds01.tab1 order by col1;
ROLLBACK TRANSACTION;
bq query --use_legacy_sql=false \
'select * from ds01.tab1 order by col1;'
-- 6. クリーンアップ
gcloud projects list
gcloud projects delete project01-9999999 \
--quiet