【问题标题】: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 方法可以处理多个对象或单个对象,但如果这确实是该方法的输出的计费方式,我想避免为每个插入付费。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    是的,Put 使用 StreamingInsert。如果你去putMulti的定义,你会看到它正在调用Tabledata.InsertAll,也就是method called for streaming

    请注意,streaming is charged by row inserted 不是按要求提供的。因此,例如,每个“Put”写 5 行而不是仅写 1 行是一样的。

    如果您的用例允许,您应该考虑使用 loading job 加载数据,这是批量加载的免费操作。

    【讨论】:

    • 非常感谢您的回复!我会看看我是否可以执行加载工作并跟进
    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多