Insert 資料 -- 程式碼範例
var credentialsPath = $"{your-file-path}your-key-name.json";
var credential = GoogleCredential.FromFile(credentialsPath);
- client端
- 建立 client
- 建立/讀取現存dataset
- 建立/讀取現存table
var client = BigQueryClient.Create(ProjectId,credential);
var dataset = client.GetOrCreateDataset(request.DataSet);
var table = dataset.GetOrCreateTable(request.TableName, new TableSchemaBuilder
{
{ "id", BigQueryDbType.Int64 },
{ "name", BigQueryDbType.String },
{ "phone", BigQueryDbType.Int64 }
}.Build());
- 資料型態
- 是以
BigQueryInsertRow來進行一列一列資料的insert
- 可以整理成一個list來準備要insert的資料集
- 藉由回傳的內容來確定insert的筆數以及錯誤的筆數
var insertResults = table.InsertRows(insertRows);
effectRows = insertResults.InsertAttemptRowCount;
errorRows = insertResults.OriginalRowsWithErrors;
var insertResults = table.InsertRows(insertRows, _insertOptions);
switch (insertResults.Status)
{
case BigQueryInsertStatus.AllRowsInserted:
effectedRows += insertResults.InsertAttemptRowCount;
break;
case BigQueryInsertStatus.SomeRowsInserted:
effectedRows += insertResults.InsertAttemptRowCount;
errorRows += insertResults.OriginalRowsWithErrors;
errorMessages = insertResults.Errors.ToList();
break;
case BigQueryInsertStatus.NoRowsInserted:
errorRows += insertResults.OriginalRowsWithErrors;
errorMessages = insertResults.Errors.ToList();
break;
}
private readonly InsertOptions _insertOptions = new()
{
SkipInvalidRows = true,
// 預設false,設定成true可以跳過有錯誤的Row,並將同batch的其他正確資料進行insert
SuppressInsertErrors = true
// 預設false,設定成true可以避免錯誤的Row Throw Exception,讓程式持續運行
};
var errorMsgs = insertResults.Errors.ToList();
// 取得errorList,利用GetEnumerator()將詳細理由列出
var errorCounts = insertResults.OriginalRowsWithErrors
查詢 -- 程式碼範例
- Insert資料會使用上述table方式來insert,若要查詢的話,會以
BigqueryService來進行操作
- 新增一個service
var service = new BigqueryService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = "BigQuery API Sample"
});
- 利用此service可以查看指定dataset的table列表
service.Tables.List(projectDatasetId.Split(':')[0]
, projectDatasetId.Split(':')[1]).Execute().Tables;
service.Tabledata.List(ProjectId, dataSet, tableName).Execute().Rows.Take(10);
var rows = client.ListRows(ProjectId, DataSet, TableName).Take(10);