Как эффективно удалить данные из Redshift? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть данные в моем кластере Redshift. Мне нужно найти лучший и эффективный способ удаления ранее сохраненных данных при повторном запуске задания.

У меня есть эти два столбца для определения предыдущих данных previous_key (столбец, который соответствует run_dt) и creat_ts (время, когда мы загружаем данные)

Пока я нашел два подхода, но они не работают эффективно:

  • Использовать команду sql DELETE - может быть медленным, в конечном итоге требуется очистить таблицу, чтобы освободить место для хранения и обработать строки
  • Выгрузить данные из таблицы в файл на S3, а затем загрузить таблицу обратно (усечь и вставить) с отфильтрованным значением max clndr_key. Не очень хорошо, может быть рискованно.

Пожалуйста, предложите любой хороший подход для повторного запуска заданий в кластере Redshift. Примечание: функциональность разделов недоступна.

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Удаление данных, сохраненных в Redshift с помощью команды DELETE, займет некоторое время.Причина в том, что вы делаете мягкое удаление, я имею в виду, что вы помечаете существующие строки как удаленные, а затем вставляете новую строку, представляющую обновленную форму данных.

Таким образом, одним из способов является выполнение DELETE для нежелательных данных.Вместо удаления одного за другим вы должны попытаться обратиться к нескольким строкам.Поскольку каждая запись выполняется в виде фрагментов данных размером 1 МБ, мы должны в конечном итоге свести к минимуму чтение и запись этих данных.

Если у вас есть хорошая информация о топологии данных, хранящихся в вычислительных узлах и срезах Redshift, в дополнение к этой информации о ключе распределения и ключе сортировки вы можете разделить команду DELETE на несколько операторов.(Как бы мы ни ожидали, что Redshift SQL Engine сделает это для разработчика SQL)

0 голосов
/ 25 июня 2019

Похоже, вы хотите удалить данные после определенного периода времени.

В этом случае Redshift рекомендует «Таблицы временных рядов»:


По сути, вы создаете новую таблицу для каждой вставки фиксированного временного окна. Тогда основным интерфейсом к этим данным является представление, что UNION объединяет все эти таблицы.

Если вы хотите удалить данные после временного окна, вы можете просто удалить всю таблицу / удалить ее из определения представления. Вакуум / Анализ / Дорогие запросы не требуются.

Источник: https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-time-series-tables.html

...