Моя цель - загрузить каталог файлов на Azure Blob в сторонний REST API, который принимает данные в формате CSV. На дату есть один файл, размер каждого файла составляет 50–100 МБ, а файлов более 100. Я планирую загружать много файлов параллельно, поэтому я не хочу читать данные в память или записывать временные файлы.
Приведенный ниже код работает, но у меня есть несколько вопросов:
-
Когда я звоню get_blob_to_stream
, все ли данные находятся в памяти в этот момент? Я думаю, что да, потому что могу вызвать для него gzip.compress ()
Могу ли я что-нибудь сделать, чтобы сделать это более эффективным? Я хочу быстро загружать большие объемы данных (в документации к API, который я использую, даже есть пример загрузки 1 миллиарда строк в 100 миллионов блоков строк (https://developer.domo.com/docs/dataset/import-and-export-data))
hook = HttpHook(method=HTTPMethod.PUT, http_conn_id=conn)
with io.BytesIO() as input_io:
blob_service.get_blob_to_stream(container_name=cn, blob_name=bn, stream=input_io)
r = hook.run(
endpoint=url,
headers={"Authorization": "Bearer " + token, "Content-Type": "text/csv"},
data=input_io.getvalue(),
extra_options={"stream": True},
)
Я предполагаю, что данные передаются напрямую из Azure Blob в REST API