Как выполнить пакетную потоковую вставку в BigQuery из задания Beam

Я пишу в BigQuery для работы с лучом из неограниченного источника. Я использую ПОТОКОВЫЕ ВСТАВКИ в качестве метода. Я смотрел, как регулировать количество строк в BigQuery на основе рекомендаций в

https://cloud.google.com/bigquery/quotas#streaming_inserts

API BigQueryIO.Write не позволяет устанавливать микропакеты.

Я искал использование триггеров, но не был уверен, группирует ли BigQuery все на панели в запрос. Я настроил триггер, как показано ниже

    Window.<Long>into(new GlobalWindows())
    .triggering(
        Repeatedly.forever(
            AfterFirst.of(
                AfterPane.elementCountAtLeast(5),
                AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.standardMinutes(2)))
            ))
    .discardingFiredPanes());

Q1. Поддерживает ли Beam микропакеты или создает один запрос для каждого элемента в коллекции PCollection?

Q2. Имеет ли смысл приведенный выше триггер? Даже если бы я установил окно / триггер, он мог бы отправлять один запрос для каждого элемента.


person PK109    schedule 09.03.2019    source источник
comment
это DOS потоковые вставки, почему бы не использовать ЗАГРУЗКИ ФАЙЛОВ?   -  person Pablo    schedule 10.03.2019
comment
Мое намерение состояло в том, чтобы иметь не менее 500 строк (как предлагается в документации) или дождаться заранее определенного времени для отправки запроса на вставку, чтобы можно было сбалансировать задержку и пропускную способность. Мой вариант использования - данные как можно в режиме реального времени.   -  person PK109    schedule 10.03.2019
comment
Изучив исходный код, я понял, что Beam bigquery действительно создает небольшие партии. github.com/apache/beam/blob/master/sdks/java/io/ показывает, что в методе finishBundle он пытается отправить несколько строк в запрос. Но этот класс отмечен как внутренний (уровень пакета). Невозможно увидеть, сколько пакетов или как он дросселируется при различной скорости ввода. Было бы идеально увидеть какое-нибудь объяснение того, как он себя ведет.   -  person PK109    schedule 10.03.2019
comment
Звучит отлично. Постараюсь что-нибудь достать.   -  person Pablo    schedule 10.03.2019
comment
Возможно, это отвлекает, источник github.com/apache/beam/blob/master/sdks/java/io/ показывает метод writeAndGetErrors показывает, что он применяет к коллекции глобальное окно, подобное тому, что я опубликовал в вопросе. Таким образом, это переопределит любой WindowFn, который был применен до записи в BigQuery. Что из этого следует?   -  person PK109    schedule 10.03.2019


Ответы (1)


Я не понимаю, что вы подразумеваете под микропакетом. На мой взгляд, BigQuery поддерживает загрузку данных как пакетами, так и в потоковом режиме.

Как правило, пакетные загрузки регулируются квотами, а потоковые загрузки немного дороже.

После установки метода вставки для вашего BigQueryIO в документации указано:

Note: If you use batch loads in a streaming pipeline, you must use withTriggeringFrequency to specify a triggering frequency.

Никогда не пробовал, но withTriggeringFrequency похоже, это то, что вам здесь нужно.

person vdolez    schedule 10.03.2019
comment
Под микропакетами я подразумеваю небольшие пакеты или строки, которые упаковываются в запрос к BigQuery. Ссылка на квоты в исходном вопросе говорит, что мы рекомендуем не более 500 строк. Пакетная обработка может до определенной степени повысить производительность и пропускную способность. Поэтому я бы интерпретировал это так, как даже в случае потоковых вставок, он может создавать эти небольшие партии для увеличения пропускной способности по сравнению с 1 строкой за раз. - person PK109; 10.03.2019