2025, Dec 07 06:02
Как узнать длительность импортов в Amazon QuickSight SPICE по IngestionTimeInSeconds
Как найти медленные импорты в Amazon QuickSight SPICE: list_ingestions и IngestionTimeInSeconds помогут измерить длительность загрузок и снизить таймауты.
Разбираться с таймаутами загрузки в Amazon QuickSight SPICE — занятие нервное, особенно когда нельзя изменить оркестрацию заданий «выше по течению». Если задания импорта падают по таймауту и нужно перенести самые тяжёлые наборы данных на непиковые окна, практический вопрос сводится к простому: сколько на самом деле занимает загрузка каждого набора?
Суть проблемы
Ошибки импорта возникали из‑за таймаутов наборов данных во время загрузки в SPICE. Запуски импорта менять было нельзя, поэтому задача — найти самые медленные наборы и перенести их обновление на более спокойные часы. Попытки использовать list_ingestions, describe_ingestion и list_refresh_schedules изначально не показывали фактическую длительность. Рассмотрели и вариант с CloudWatch, но потребность была простой: время начала и конца или единственное значение длительности для каждого импорта.
Пример, который не показывает длительность
Обычно для начала перечисляют загрузки для набора данных и смотрят их общий статус или метаданные — но явной продолжительности вы так и не увидите. Такой набросок не отвечает на вопрос «сколько это заняло?»:
def scan_ingestions_no_timing(qs_api, ds_token):
records = qs_api.list_ingestions(dataset=ds_token)
for rec in records:
# Это выводит, что загрузки существуют, но их длительность не показана
print("ingestion observed")
Даже если добавить больше полей, тайминги не появятся, пока вы явно не прочтёте значение, которое и отражает длительность.
Что на самом деле происходит
Нужное уже есть в наборе результатов API, который вы вызываете. Ответ list_ingestions содержит поле IngestionTimeInSeconds. Это ровно то значение, которое показывает, сколько заняла каждая загрузка.
Решение: извлекать IngestionTimeInSeconds и сортировать по самым медленным
Выполните запрос list_ingestions и извлеките IngestionTimeInSeconds. После этого можно ранжировать наборы данных по наблюдаемой длительности и перенести самые медленные обновления на непиковые окна.
def collect_ingestion_timings(qs_api, ds_token):
data = qs_api.list_ingestions(dataset=ds_token)
timing_rows = []
for item in data:
secs = item.get("IngestionTimeInSeconds")
if secs is not None:
timing_rows.append({"row": item, "seconds": secs})
timing_rows.sort(key=lambda r: r["seconds"], reverse=True)
return timing_rows
# Пример использования
report = collect_ingestion_timings(qs_api=my_quicksight_client, ds_token=my_dataset_ref)
for entry in report:
print(f"duration_seconds={entry['seconds']}")
Так вы получаете чёткий, детерминированный способ находить самые тяжёлые обновления. Никаких догадок и ручных сопоставлений — просто прочитайте поле и действуйте.
Почему это важно
Когда таймауты загрузки в SPICE приводят к сбоям, перенос тяжёлых импортов за пределы пиковых часов — часто самая быстрая мера, особенно если вы не можете менять инфраструктуру, запускающую эти задания. Наличие длительности для каждого импорта позволяет сначала взяться за худших «нарушителей» и снизить конкуренцию за ресурсы, не трогая верхний конвейер.
Итог
Если вы боретесь с таймаутами импорта в Amazon QuickSight и хотите понять, какие наборы данных тормозят, ответ уже есть в отклике list_ingestions: читайте IngestionTimeInSeconds. Используйте его, чтобы расставить приоритеты и перенести тяжёлые обновления на непиковые окна, уменьшая число сбоев и поддерживая дашборды в рабочем состоянии.