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 中的缺失值

在 google bigquery 中,如何使用 google python 客户端使用 javascript UDF