Эффективно загружайте данные (requests.put) в REST API из Azure Blob - PullRequest
0 голосов
/ 05 августа 2020

Моя цель - загрузить каталог файлов на Azure Blob в сторонний REST API, который принимает данные в формате CSV. На дату есть один файл, размер каждого файла составляет 50–100 МБ, а файлов более 100. Я планирую загружать много файлов параллельно, поэтому я не хочу читать данные в память или записывать временные файлы.

Приведенный ниже код работает, но у меня есть несколько вопросов:

  1. Когда я звоню get_blob_to_stream, все ли данные находятся в памяти в этот момент? Я думаю, что да, потому что могу вызвать для него gzip.compress ()

  2. Могу ли я что-нибудь сделать, чтобы сделать это более эффективным? Я хочу быстро загружать большие объемы данных (в документации к 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

...