ヘッダー
Visual Basic サンプル集
VB2013対応 VB2015対応 VB2017対応 VB2019対応

BigQueryで行を挿入する

2022/5/8

→ C# のサンプルに切り替える

この記事は 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の使用方法
  • Imports Google.Cloud.BigQuery.V2がソースコードの冒頭付近に記載されている。
Dim cred = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile("C:\gcpfiles\myproject-3bb215c09061.json")
Using client = BigQueryClient.Create("myproject", cred)
    '認証情報を環境変数 GOOGLE_APPLICATION_CREDENTIALS から読み取る場合は、次の1行だけでOK。
    '参考 https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries#before-you-begin
    'Using client = BigQueryClient.Create("myproject")

    Dim rows As New List(Of BigQueryInsertRow)
    'insertIdは省略可能です。指定するとBigQueryは最低で1分間同じinsertIdの挿入処理を阻止する場合があるので再実行時に便利です。
    rows.Add(New BigQueryInsertRow(insertId:="row1") From {{ "id", 1 }, { "title", "北海道" }})
    'rows.Add(new BigQueryInsertRow(insertId:="row2")…  // ←2行目以降があればこのように追加していけます。

    Dim result As BigQueryInsertResults = client.InsertRows("mydataset", "mytable", rows)
    Debug.WriteLine($"{result.Errors.Count()} errors with {rows.Count} row(s) inserting operation.")
End Using

Debug.WriteLineが表示される場所

 

 

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の使用方法
  • Imports Google.Cloud.BigQuery.V2がソースコードの冒頭付近に記載されている。
Dim cred = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile("C:\gcpfiles\myproject-3bb215c09061.json")
Using client = BigQueryClient.Create("myproject", cred)
    '認証情報を環境変数 GOOGLE_APPLICATION_CREDENTIALS から読み取る場合は、次の1行だけでOK。
    '参考 https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries#before-you-begin
    'Using client = BigQueryClient.Create("myproject")

    Dim sql As String = "INSERT mydataset.mytable (id, title) VALUES (123, '徳川家康')"
    Dim result As BigQueryResults = client.ExecuteQuery(sql, Nothing)

    Debug.WriteLine($"{result.NumDmlAffectedRows} row(s) are inserted.")
End Using

Debug.WriteLineが表示される場所

メモ: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の使用方法
  • Imports Google.Cloud.BigQuery.V2がソースコードの冒頭付近に記載されている。
Dim cred = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile("C:\gcpfiles\myproject-3bb215c09061.json")
Using client = BigQueryClient.Create("myproject", cred)
    '認証情報を環境変数 GOOGLE_APPLICATION_CREDENTIALS から読み取る場合は、次の1行だけでOK。
    '参考 https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries#before-you-begin
    'Using client = BigQueryClient.Create("myproject")

    Dim sql As String = "INSERT mydataset.mytable (id, title) VALUES (1, '北海道'), (2, '青森県')"
    Dim result As BigQueryResults = client.ExecuteQuery(sql, Nothing)

    Debug.WriteLine($"{result.NumDmlAffectedRows} row(s) are inserted.")
End Using

Debug.WriteLineが表示される場所

 

 

参考

ストリーミングを使った挿入の C# のサンプル

ストリーミング挿入

 

BigQueryで使用できるSQLの構文

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

 

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

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

 

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

SQL アンチパターンの回避