Я хочу применить пользовательскую логику к набору данных, помещенному в Redshift.Пример входных данных:
userid, event, fileid, timestamp, ....
100000, start, 120, 2018-09-17 19:11:40
100000, done, 120, 2018-09-17 19:12:40
100000, done, 120, 2018-09-17 19:13:40
100000, start, 500, 2018-09-17 19:13:50
100000, done, 120, 2018-09-17 19:14:40
100000, done, 500, 2018-09-17 19:14:50
100000, done, 120, 2018-09-17 19:15:40
Это означает что-то вроде:
file 120: start-----done-----done-----done-----done
file 150: start-----done
time : 11:40----12:40----13:40-----14:40-----15:40
Но это должно выглядеть так:
file 120: start-----done-----done
file 150: start-----done
time : 11:40----12:40----13:40-----14:40-----15:40
Файл 120 былпрерывается после запуска файла 150
Имейте в виду, что много, если здесь разные пользователи и много разных файлов.
Очищенные данные должны быть:
userid, event, fileid, timestamp, ....
100000, start, 120, 2018-09-17 19:11:40
100000, done, 120, 2018-09-17 19:12:40
100000, done, 120, 2018-09-17 19:13:40
100000, start, 500, 2018-09-17 19:13:50
100000, done, 500, 2018-09-17 19:14:50
У одного и того же пользователя не должно быть одновременно нескольких файлов.Таким образом, после запуска второго события из первого не должны удаляться из текущего набора данных.
Код прост, но на python и легко масштабируется, например, для Google Dataflow, но перемещает 100GB + из AWS в GCне очень хорошая идея.
Вопрос № 1: Возможно ли сделать это на SQL (используя специфические функции postgres / redshift) или лучше использовать Spark?(но не уверен, как это реализовать там)
Вопрос № 2: Любое предложение о том, может быть, лучше использовать AWS Batch или что-то еще, потому что с Apache Beam - это легко и довольно очевидно,но как работает AWS Batch и как разделить набор данных на куски (например, группы на пользователя) - это большой вопрос.Мое предложение состоит в том, чтобы каким-то образом выгрузить данные из красного смещения в корзину S3, но разделить их таким образом, чтобы отдельный файл = пользователь, а затем, если пакет aws поддерживает это - просто загрузите корзину, и каждый файл должен обрабатываться одновременно на уже созданных экземплярах.Не уверен, имеет ли это смысл.