google-bigquery - Google Bigquery 客户端库中的 put 方法是否使用流式插入?
问题描述
我想知道下面的代码是否会导致每个值都发生流式插入src
(假设传递了一个结构切片src
)?
func (u *Inserter) Put(ctx context.Context, src interface{}) (err error) {
ctx = trace.StartSpan(ctx, "cloud.google.com/go/bigquery.Inserter.Put")
defer func() { trace.EndSpan(ctx, err) }()
savers, err := valueSavers(src)
if err != nil {
return err
}
return u.putMulti(ctx, savers)
}
Put
方法可以处理多个对象或单个对象,但如果这确实是该方法的输出的计费方式,我想避免为每个插入付费。
解决方案
是的,Put 使用 StreamingInsert。如果您查看putMulti的定义,您会看到它正在调用 Tabledata.InsertAll,这是为流式调用调用的方法。
请注意,流式传输按插入的行收费,而不是按请求收费。因此,例如,每个“Put”写入 5 行而不是仅写入 1 行是相同的。
如果您的用例允许,您应该考虑使用加载作业加载数据,这是批量加载的免费操作。
推荐阅读
- javascript - 在html-select中选择选项后如何避免onclick再次工作?
- python - 来自 SavedModel 的 TensorFlow 推理:期望 attr strides 的 int64_t 值,得到 numpy.int32
- ios - 在后台处理 dataTask GET 请求
- reactjs - useRef 在 DOM 中存储值和显示值 [React]
- migration - Flex 到 Apache Royale 的迁移
- java - 如何从 UTC 日期时间到日期修改小数部分
- r - 删除R中向量中没有空格的重复单词
- sql-server - 无法更新新创建的列
- jquery - 在您选择选择选项时显示数据库中的数据
- java - 如何使用 mockito 模拟和编写 try 和 catch 块的单元测试