C#调用BigQuery Storage Write API的简易用法示例咨询
C# BigQuery Storage Write API 最简使用示例
前置要求
- 已安装NuGet包
Google.Cloud.BigQuery.Storage.V1,版本≥2.5.0 - 已配置好GCP身份凭证,和旧版insertAll的身份验证逻辑完全一致
等价于旧版insertAll的最简写入示例
不需要手动编译protobuf定义,可直接写入字典格式/JSON格式的数据,和Java JsonStreamWriter 实现逻辑完全一致:
using Google.Cloud.BigQuery.Storage.V1; using Google.Protobuf.WellKnownTypes; using System.Collections.Generic; using System.Threading.Tasks; public async Task BatchWriteToBigQuery(string projectId, string datasetId, string tableId, List<Dictionary<string, object>> dataRows) { // 初始化写入客户端,和旧版BigQueryClient初始化逻辑一致 var client = await BigQueryWriteClient.CreateAsync(); // 构造默认写入流,_COMMITTED类型写入后立即可见,和insertAll行为完全一致 var streamName = new WriteStreamName(projectId, datasetId, tableId, "_default"); // 创建批量写入流 var writer = client.AppendRowsAsync(streamName); // 构造写入数据,自动匹配目标表Schema做类型转换 var protoRows = new List<Struct>(); foreach (var row in dataRows) { var structRow = new Struct(); foreach (var kv in row) { structRow.Fields.Add(kv.Key, Value.ForDynamic(kv.Value)); } protoRows.Add(structRow); } // 提交写入请求 await writer.WriteAsync(AppendRowsRequest.FromJsonRows(protoRows)); // 等待写入结果返回 var writeResponse = await writer.ResponseAsync; }
提示:如果原始数据是JSON字符串,可直接调用
Struct.Parser.ParseJson(jsonString)转换为符合要求的Struct对象,不需要手动解析字段。
用法优势对比旧版insertAll
- 身份验证逻辑完全复用,仅需要原有
bigquery.tables.updateData权限即可使用 - 单请求支持最大10MB数据,远高于insertAll的1MB单请求限制,高吞吐场景下性能提升明显
- 写入成本比insertAll低约30%
- 可自选开启Exactly-Once语义写入,不需要额外实现业务层去重逻辑
内容的提问来源于stack exchange,提问作者cliphc
相关产品推荐
相关产品推荐

