BigQuery медленное чтение в конвейере Google DataFlow - PullRequest
0 голосов
/ 20 марта 2020

Для нашей аналитики почти в реальном времени данные будут перенаправляться в pubsub, а Apache конвейер потока данных луча будет обрабатывать, сначала записывая в bigquery, а затем выполнять агрегированную обработку, снова считывая из bigquery, а затем сохраняя агрегированные результаты в Hbase для OLAP. Вычисление куба.

Вот пример функции ParDo, которая используется для извлечения записи из bigquery

String eventInsertedQuery="Select count(*) as usercount from <tablename> where <condition>";
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
QueryJobConfiguration queryConfig
=QueryJobConfiguration.newBuilder(eventInsertedQuery).build();
TableResult result =  bigquery.query(queryConfig);
FieldValueList row = result.getValues().iterator().next();
LOG.info("rowCounttt {}",row.get("usercount").getStringValue());

bigquery.query занимает около 4 секунд. Есть предложения по улучшению? Поскольку это аналитика, близкая к реальной, эта временная длительность недопустима.

1 Ответ

1 голос
/ 24 марта 2020

Частые чтения из BigQuery могут добавить нежелательную задержку в вашем приложении. Если учесть, что BigQuery - это хранилище данных для Analytics , я думаю, что 4 секунды - это хорошее время отклика. Я бы предложил оптимизировать запрос , чтобы уменьшить порог в 4 секунды.

Ниже приведен список возможных вариантов:

  1. Оптимизация оператора запроса, включая изменение схемы базы данных для добавления разбиения или кластеризации .
  2. Использование реляционной базы данных, предоставленной Cloud SQL для получения лучшего времени отклика.
  3. Изменение архитектуры вашего приложения. Как рекомендуется в комментариях, это хороший вариант для преобразования данных перед записью в BQ, так что вы можете избежать задержки запроса данных дважды. Есть несколько статей для выполнения вычислений в реальном времени с помощью Dataflow (например, создание приложения реального времени и агрегированных данных в реальном времени ).

С другой стороны, имейте в виду, что время до завершения sh запроса не включено в веб-страницу BigQuery SLA , на самом деле, ожидается, что ошибки может произойти и потребовать еще больше времени для завершения sh запроса, см. Требования к отсрочке в той же ссылке.

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