You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:54:01