Использует ли метод put в клиентской библиотеке Google Bigquery потоковую вставку? - PullRequest
2 голосов
/ 07 февраля 2020

Я хотел бы знать, вызывает ли приведенный ниже код потоковую вставку для каждого значения 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 Ответ

0 голосов
/ 08 февраля 2020

Да, Put использует StreamingInsert. Если вы go определите putMulti , вы увидите, что он вызывает Tabledata.InsertAll, то есть метод , вызываемый для потоковой передачи .

Обратите внимание, что потоковая передача взимается с вставленной строки , а не по запросу. Таким образом, это то же самое, что записать, например, 5 строк на «Put», чем одну.

Если ваш сценарий использования позволяет, вы должны смотреть на загрузку данных с помощью load job , которая является бесплатной операцией для массовой загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...