Я написал простое Java-приложение для экспорта таблиц из Google BigQuery с использованием метода tabledata: list (https://cloud.google.com/bigquery/docs/reference/v2/tabledata/list) и использование pageToken для пейджинга. Независимо от того, что я установил для параметра maxResults, я могу получить только около 5000 строк за запрос (в зависимости от размера строки). Поскольку запросы занимают несколько секунд, таким образом я могу скачать в среднем только 100 МБ в минуту.
Способы, которые я нашел, чтобы ускорить это до сих пор:
Пакетная обработка (в моем случае не подходит)
- пакетный экспорт в Google Cloud Storage
Распараллеливание запросов
- используя начальный индекс
- использование динамических разделов таблицы
Кажется, наиболее эффективным способом для моего варианта использования является последний вариант в сочетании с декоратором снимков, чтобы получить стабильный результат в случае изменения таблиц:
myproject:mydataset.mytable@timestamp$0-of-3
myproject:mydataset.mytable@timestamp$1-of-3
myproject:mydataset.mytable@timestamp$2-of-3
Итак, мои вопросы:
- Есть ли лучший (= более быстрый) подход
- Учитывайте количество запросов списка табличных данных в соответствии с ограничением в 50 одновременных запросов.