# #python #google-cloud-platform #google-bigquery #google-cloud-storage #bucket
Вопрос:
Я планирую экспортировать ~600 ТБ данных из BigQuery в корзину в облачном хранилище для целей архивирования. До сих пор я пытался использовать функцию экспорта BQ, но ограничение в 50 ТБ в день сдерживает процесс переноса. Я также рассматривал возможность использования оператора EXPORT DATA
SQL, но это может быть довольно дорого, учитывая цены BQ по требованию.
API чтения хранилища выглядит так, как будто он был создан для решения ограничения экспорта, но, похоже, нет никаких примеров того, как явно передавать большие объемы данных из BQ в GCS. Мне было интересно, как будет выглядеть этот процесс в скрипте Python для переноса большого количества таблиц. Спасибо!
Ответ №1:
Согласно документации для API облачного хранилища Google, «Потоковая передача не поддерживается для консоли, Python или Ruby».
Однако вы можете «Передать данные в команду gsutil cp и использовать тире для исходного URL».
Затем вы должны иметь возможность написать скрипт Python с помощью клиентской библиотеки Python API хранилища BigQuery и передать его команде gsuitl cp для записи в корзину облачного хранилища:
PYTHON PROCESS | gsutil cp - gs://BUCKET_NAME/OBJECT_NAME
где PYTHON PROCESS
какая-то оболочка вокруг вашего кода Python, который использует клиентскую библиотеку Python API хранилища BigQuery.
Чтобы уточнить, вы могли бы сделать что-то вроде этого:
python script_using_storageapi.py | gsutil cp - gs://name_of_bucket/name_of_object
Я только что попробовал это с помощью простого скрипта Python, использующего операторы печати, и это сработало, но, вероятно, существуют более элегантные способы отправки объектов API для чтения хранилища:
def print_list(some_list):
for element in some_list:
print(element)
if __name__ == '__main__':
test_list = ['Write', 'to', 'cloud', 'storage', 'bucket']
print_list(test_list)