Я не мог найти простой способ добиться этого. Но после нескольких повторений попыток это то, что я сделал, и его работа над огромным списком запросов. В основном мы использовали это для пакетной операции для огромного запроса в нескольких подзапросах.
// Break down your huge workload into smaller chunks, in this case huge query string is broken
// down to a small set of subqueries
// Here if needed to optimize further down, you can provide an optimal partition when parallelizing
val queries = sqlContext.sparkContext.parallelize[String](subQueryList.toSeq)
// Then map each one those to a Spark Task, in this case its a Future that returns a string
val tasks: RDD[Future[String]] = queries.map(query => {
val task = makeHttpCall(query) // Method returns http call response as a Future[String]
task.recover {
case ex => logger.error("recover: " + ex.printStackTrace()) }
task onFailure {
case t => logger.error("execution failed: " + t.getMessage) }
task
})
// Note:: Http call is still not invoked, you are including this as part of the lineage
// Then in each partition you combine all Futures (means there could be several tasks in each partition) and sequence it
// And Await for the result, in this way you making it to block untill all the future in that sequence is resolved
val contentRdd = tasks.mapPartitions[String] { f: Iterator[Future[String]] =>
val searchFuture: Future[Iterator[String]] = Future sequence f
Await.result(searchFuture, threadWaitTime.seconds)
}
// Note: At this point, you can do any transformations on this rdd and it will be appended to the lineage.
// When you perform any action on that Rdd, then at that point,
// those mapPartition process will be evaluated to find the tasks and the subqueries to perform a full parallel http requests and
// collect those data in a single rdd.
Если вы не хотите выполнять какие-либо преобразования на контенте, такие как разбор полезной нагрузки ответа и т. д. Затем вы можете использовать foreachPartition
вместо mapPartitions
для немедленного выполнения всех этих http-вызовов.
Вопрос: Можно ли настроить уведомление по электронной почте, отправляемое нескольким операторам для этой конкретной работы?
Я не верю, что это возможно.
Конечно, глядя на структуру [msdb].[dbo].[sysjobs]
, различные столбцы operator_id
находятся в самой этой таблице, что подтверждает идею, что 1 для многих невозможна.
Но некоторые альтернативы
sysoperators
, это хорошо для строк, которые могут вписаться в nvarchar(100)
Если предполагается, что несколько человек в вашей организации должны быть уведомлены о сбое задания, вы можете изменить адрес электронной почты оператора, включив в него несколько почтовых ящиков, разделив каждый почтовый ящик точкой с запятой.
Я предполагаю, что ваш уведомленный оператор называется JobWatcher:
EXECUTE msdb.dbo.sp_update_operator
@name = N'JobWatcher',
@email_address = N'person1@company.org;person2@company.org';
Теперь person1@company.org и person2@company.org будут получать почту при сбое задания.
Пожалуйста, используйте скрипт ниже, чтобы увеличить длину символа адреса электронной почты.
USE mdsdb
GO
ALTER TABLE sysoperators
ALTER column email_address NVARCHAR(2000);
Простейший метод, который я использую для уведомления нескольких "OPERATORS"
на "JOB FAILURE"
, заключается в следующем:
В SSMS>SQL Server Agent>Operators
создайте новый OPERATOR
или EDIT
существующий и добавьте дополнительные адреса электронной почты, разделенные ;
в рамке "E-mail name:"
.
Так что это то, что я придумал в качестве обходного пути, если намерение состоит в том, чтобы несколько человек в вашей организации были уведомлены о неудачной работе, а другая группа из нескольких человек - об успехах.
Вы заметите, что Шаги 1-3 являются обычными задачами, для которых используется задание по расписанию, как и для вашей задачи. Перед этим может быть столько шагов, сколько необходимо, но последний шаг (Шаг 3) процесса должен быть разбит на «В случае успеха» и «В случае отказа», чтобы перейти к отдельным электронным письмам. Кроме того, все сообщения «О сбоях» должны быть направлены на ваш «Email о сбое», как указано ниже. Таким образом, группа Failure получает туда электронные письма, и работа по-прежнему не выполняется для исторических записей.
На вкладке «Дополнительно» шагов «Работа» вы увидите возможность изменить направление действий «В случае успеха» и «В случае отказа».
Fail Email Email Step - общее свойство
Fail Email Email Step - свойство Advanced
Успешный шаг электронной почты - общее свойство
Успешный шаг электронной почты - предварительное свойство
Для других нуждающихся в помощи. Уведомление нескольких операторов с результатами различий
Рекомендуется создать группу на своем почтовом сервере, отправить уведомления группе, а затем контролировать количество получателей с почтового сервера.