ヘッダー
C# サンプル集
 

BigQueryで行を削除する

2022/5/8

→ Visual Basic のサンプルに切り替える

この記事は Google Cloud Platform(GCP) の BigQueryを対象にしています。

BigQuery: クラウド データ ウェアハウス  |  Google Cloud

  • この記事の内容は Google.Cloud.BigQuery パッケージ バージョン 2.3.0 で確認しています。

 

 

指定した行を削除する

前提

  • GCPのプロジェクトIDは myproject。
  • BigQuery のデータセットは mydataset、テーブルは mytable。
  • テーブル mytable には INTEGER型の id列 がある。
  • BigQueryにアクセスできるロール(たとえばオーナー)をもったサービスアカウントがある。 → サービスアカウントの作成方法
  • サービスアカウントのキーファイルがC:\gcpfiles\myproject-3bb215c09061.jsonに存在する。→ キーの作成とダウンロード
  • NuGet で Google.Cloud.BigQuery.V2 パッケージをインストールしている。→ NuGetの使用方法
  • using Google.Cloud.BigQuery.V2;がソースコードの冒頭付近に記載されている。
var cred = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile(@"C:\gcpfiles\myproject-3bb215c09061.json");
using var client = BigQueryClient.Create("myproject", cred);
//認証情報を環境変数 GOOGLE_APPLICATION_CREDENTIALS から読み取る場合は、次の1行だけでOK。
//参考 https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries#before-you-begin
//using var client = BigQueryClient.Create("myproject");

string sql = "DELETE mydataset.mytable WHERE id = 123";
BigQueryResults result = client.ExecuteQuery(sql, null);

System.Diagnostics.Debug.WriteLine($"{result.NumDmlAffectedRows} row(s) are deleted.");

Debug.WriteLineが表示される場所

メモ:WHERE句は必須です。すべて削除したい場合は すべての行を削除する例 を参照してください。

メモ:ストリーミングバッファがある場合は削除できません。時間が経ってストリーミングがなくなれば削除できるようになります。「UPDATE or DELETE DML statements are not supported over table」というエラーが発生します。

 

 

すべての行を削除する

前提

  • GCPのプロジェクトIDは myproject。
  • BigQuery のデータセットは mydataset、テーブルは mytable。
  • テーブル mytable には INTEGER型の id列 がある。
  • BigQueryにアクセスできるロール(たとえばオーナー)をもったサービスアカウントがある。 → サービスアカウントの作成方法
  • サービスアカウントのキーファイルがC:\gcpfiles\myproject-3bb215c09061.jsonに存在する。→ キーの作成とダウンロード
  • NuGet で Google.Cloud.BigQuery.V2 パッケージをインストールしている。→ NuGetの使用方法
  • using Google.Cloud.BigQuery.V2;がソースコードの冒頭付近に記載されている。
var cred = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile(@"C:\gcpfiles\myproject-3bb215c09061.json");
using var client = BigQueryClient.Create("myproject", cred);
//認証情報を環境変数 GOOGLE_APPLICATION_CREDENTIALS から読み取る場合は、次の1行だけでOK。
//参考 https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries#before-you-begin
//using var client = BigQueryClient.Create("myproject");

string sql = "TRUNCATE TABLE mydataset.mytable";
BigQueryResults result = client.ExecuteQuery(sql, null);
result.ThrowOnAnyError(); //BigQueryでエラーが発生した場合、C#でも例外を発生させます。
System.Diagnostics.Debug.WriteLine("Truncate done.");

Debug.WriteLineが表示される場所

メモ:実行しても空のテーブルは残ります。テーブル自体は削除されません。

メモ:ストリーミングバッファがある場合は削除できません。時間が経ってストリーミングがなくなれば削除できるようになります。「UPDATE or DELETE DML statements are not supported over table」というエラーが発生します。

 

 

参考

BigQueryで使用できるSQLの構文

標準 SQL のデータ操作言語(DML)ステートメント

 

C#を使ってシンプルなBigQueryの検索を実行する手順。認証情報の設定などGCP側で必要なことも解説されています。

クイックスタート: クライアント ライブラリの使用

 

非推奨のやり方と、その代わりに採用すべきやり方。

SQL アンチパターンの回避