- Извлечение данных из API с использованием разбиения на страницы (каждая страница возвращает N элементов).
- Потоковая передача каждого элемента. непосредственно на S3.
- Окончательный файл должен быть сжат (в настоящее время с использованием gzip) и в формате JSON.
Код: Выделить всё
async with session.client('s3') as s3:
await s3.put_object(
Bucket=bucket,
Key=key,
Body=json_content, # This holds everything in memory
ContentType='application/json',
ContentEncoding='gzip'
)
Код: Выделить всё
async def fetch_data() -> AsyncIterator[dict]:
"""Fetch paginated data from API."""
while has_more_pages:
items = await fetch_page()
for item in items:
yield item
async def stream_to_s3():
async with s3.client() as client:
# Some streaming method that handles compression
await client.stream_to_s3(
data_stream=fetch_data(),
bucket=bucket,
key=key,
compression='gzip'
)
Каково состояние? Современный подход к потоковой передаче данных на S3 с использованием aioboto3? Размер данных может составлять от нескольких КБ до нескольких ГБ.
Подробнее здесь: https://stackoverflow.com/questions/791 ... g-aioboto3