C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 > GCP > BigQuery >
BigQueryで行を挿入する
2022/5/8
この記事は Google Cloud Platform(GCP) の BigQueryを対象にしています。
BigQuery: クラウド データ ウェアハウス | Google Cloud
- この記事の内容は Google.Cloud.BigQuery パッケージ バージョン 2.3.0 で確認しています。
行を挿入する
前提
- GCPのプロジェクトIDは myproject。
- BigQuery のデータセットは mydataset、テーブルは mytable。
- テーブル mytable には INTEGER型の id列と STRING型の title列 がある。
- 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");
var rows = new List<BigQueryInsertRow>();
//insertIdは省略可能です。指定するとBigQueryは最低で1分間同じinsertIdの挿入処理を阻止する場合があるので再実行時に便利です。
rows.Add(new BigQueryInsertRow(insertId:"row1") { { "id", 1 }, { "title", "北海道" } });
//rows.Add(new BigQueryInsertRow(insertId:"row2")… // ←2行目以降があればこのように追加していけます。
BigQueryInsertResults result = client.InsertRows("mydataset", "mytable", rows);
System.Diagnostics.Debug.WriteLine($"{result.Errors.Count()} errors with {rows.Count} row(s) inserting operation.");
SQLで1行挿入する
前提
- GCPのプロジェクトIDは myproject。
- BigQuery のデータセットは mydataset、テーブルは mytable。
- テーブル mytable には INTEGER型の id列と STRING型の title列 がある。
- 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 = "INSERT mydataset.mytable (id, title) VALUES (123, '徳川家康')";
BigQueryResults result = client.ExecuteQuery(sql, null);
System.Diagnostics.Debug.WriteLine($"{result.NumDmlAffectedRows} row(s) are inserted.");
メモ:1行ずつ複数行を挿入するのはBigQueryでは非推奨です。ものすごく遅いです。参考 SQL アンチパターンの回避
SQLで複数行を1回で挿入する
前提
- GCPのプロジェクトIDは myproject。
- BigQuery のデータセットは mydataset、テーブルは mytable。
- テーブル mytable には INTEGER型の id列と STRING型の title列 がある。
- 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 = "INSERT mydataset.mytable (id, title) VALUES (1, '北海道'), (2, '青森県')";
BigQueryResults result = client.ExecuteQuery(sql, null);
System.Diagnostics.Debug.WriteLine($"{result.NumDmlAffectedRows} row(s) are inserted.");
参考
ストリーミングを使った挿入の C# のサンプル
BigQueryで使用できるSQLの構文
C#を使ってシンプルなBigQueryの検索を実行する手順。認証情報の設定などGCP側で必要なことも解説されています。
非推奨のやり方と、その代わりに採用すべきやり方。