Вот как обычно я загружаю файл GCS в локальную папку:
storage_client = storage.Client()
bucket = storage_client.get_bucket('mybucket')
blob = bucket.blob('myBigFile.txt')
blob.download_to_filename('myBigFile.txt)
Файлы, с которыми я работаю, намного, намного больше, чем допустимый размер / память облачных функций (например,от нескольких ГБ до нескольких ТБ), поэтому вышеупомянутое не будет работать для этих больших файлов.
Существует ли более простое «потоковое» (см. пример 1 ниже) или «прямой доступ» (см. пример 2 ниже)способ работы с файлами GCS в облачной функции?
Вот два примера того, что я хотел бы сделать:
# 1. Load it in chunks of 5GB -- "Streaming"
storage_client = storage.Client()
bucket = storage_client.get_bucket('mybucket')
blob = bucket.blob('myBigFile.txt')
while True:
data = blob.download_to_filename('myBigFile.txt', chunk_size=5GB)
do_something(data)
if not data: break
Или:
# 2. Read the data from GCS without downloading it locally -- "Direct Access"
storage_client = storage.Client()
bucket = storage_client.get_bucket('mybucket')
blob = bucket.blob('myBigFile.txt')
with blob.read_filename('myBigFile.txt') as f:
do_something(f)
Я не уверен, возможно ли это сделать, но я оставляю несколько вариантов того, как это может работать.Кажется, что Streaming Option поддерживается, но я не был уверен, как применить его к вышеуказанному случаю.