Google 的 Bigquery 客户端库中的 put 方法是不是使用流式插入?
Posted
技术标签:
【中文标题】Google 的 Bigquery 客户端库中的 put 方法是不是使用流式插入?【英文标题】:Does the put method in Google's Bigquery client library utilize a streaming insert?Google 的 Bigquery 客户端库中的 put 方法是否使用流式插入? 【发布时间】:2020-02-07 20:50:01 【问题描述】:我想知道下面的代码是否会导致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
方法可以处理多个对象或单个对象,但如果这确实是该方法的输出的计费方式,我想避免为每个插入付费。
【问题讨论】:
【参考方案1】:是的,Put 使用 StreamingInsert。如果你去putMulti的定义,你会看到它正在调用Tabledata.InsertAll,也就是method called for streaming。
请注意,streaming is charged by row inserted 不是按要求提供的。因此,例如,每个“Put”写 5 行而不是仅写 1 行是一样的。
如果您的用例允许,您应该考虑使用 loading job 加载数据,这是批量加载的免费操作。
【讨论】:
非常感谢您的回复!我会看看我是否可以执行加载工作并跟进以上是关于Google 的 Bigquery 客户端库中的 put 方法是不是使用流式插入?的主要内容,如果未能解决你的问题,请参考以下文章
Google BigQuery 和 Google API 客户端包
BigQuery AppsScript 客户端的默认范围不包括 Google Drive
Google BigQuery 从 Python 脚本执行 SQL 文件
BigQuery 使用 Python Google Cloud 库将日期插入“DATE”类型字段
google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910 中的缺失值