Перейти к основному содержимому
Версия: 2.0.x

SUBMIT TASK

SUBMIT TASK отправляет ETL-оператор как асинхронную задачу.

Вы можете использовать этот оператор для:

  • выполнения длительных задач в фоновом режиме (поддерживается начиная с версии 2.5)
  • планирования задачи с регулярным интервалом (поддерживается начиная с версии 3.3)

Поддерживаемые операторы включают:

Вы можете просмотреть список задач, запросив INFORMATION_SCHEMA.tasks, или просмотреть историю выполнения задач, запросив INFORMATION_SCHEMA.task_runs. Для получения дополнительной информации см. Примечания по использованию.

Вы можете удалить асинхронную задачу с помощью DROP TASK.

Синтаксис

SUBMIT TASK <task_name>
[SCHEDULE [START(<schedule_start>)] EVERY(INTERVAL <schedule_interval>) ]
[PROPERTIES(<"key" = "value"[, ...]>)]
AS <etl_statement>

PROPERTIES

Вы можете добавить session. с переменными сессии для изменения конфигураций контекста подключения при выполнении задачи.

Например, следующий оператор отправляет задачу с именем test_task со свойствами сессии, которые включают профиль запроса и увеличивают тайм-аут запроса:

SUBMIT TASK test_task
PROPERTIES (
"session.enable_profile" = "true",
"session.insert_timeout" = "10000"
)
AS insert into t2 select * from t1;

Параметры

ПараметрОбязательныйОписание
task_nameДаИмя задачи.
schedule_startНетВремя начала для запланированной задачи.
schedule_intervalНетИнтервал, с которым выполняется запланированная задача, с минимальным интервалом в 10 секунд.
etl_statementДаETL-оператор, который вы хотите отправить как асинхронную задачу. Selena в настоящее время поддерживает отправку асинхронных задач для CREATE TABLE AS SELECT и INSERT.

Примечания по использованию

Этот оператор создаёт Task, который является шаблоном для хранения задачи, выполняющей ETL-оператор. Вы можете проверить информацию о Task, запросив представление метаданных tasks в Information Schema.

SELECT * FROM INFORMATION_SCHEMA.tasks;
SELECT * FROM information_schema.tasks WHERE task_name = '<task_name>';

После запуска Task соответственно генерируется TaskRun. TaskRun указывает на задачу, которая выполняет ETL-оператор. TaskRun имеет следующие состояния:

  • PENDING: Задача ожидает выполнения.
  • RUNNING: Задача выполняется.
  • FAILED: Задача завершилась с ошибкой.
  • SUCCESS: Задача выполнена успешно.

Вы можете проверить состояние TaskRun, запросив представление метаданных task_runs в Information Schema.

SELECT * FROM INFORMATION_SCHEMA.task_runs;
SELECT * FROM information_schema.task_runs WHERE task_name = '<task_name>';

Настройка через элементы конфигурации FE

Вы можете настроить асинхронные ETL-задачи с помощью следующих элементов конфигурации FE:

ПараметрЗначение по умолчаниюОписание
task_ttl_second86400Период, в течение которого Task действителен. Единица измерения: секунды. Задачи, превышающие срок действия, удаляются. Здесь Task означает непериодическую задачу, которая выполняется только один раз.
task_check_interval_second3600Интервал времени для удаления недействительных задач. Единица измерения: секунды.
task_runs_ttl_second86400Период, в течение которого TaskRun действителен. Единица измерения: секунды. TaskRun, превышающие срок действия, автоматически удаляются. Кроме того, TaskRun в состояниях FAILED и SUCCESS также автоматически удаляются. TaskRun — это отдельный запуск периодической задачи.
task_runs_concurrency4Максимальное количество TaskRun, которые могут выполняться параллельно.
task_runs_queue_length500Максимальное количество TaskRun, ожидающих выполнения. Если число превышает значение по умолчанию, входящие задачи будут приостановлены.
task_runs_max_history_number10000Максимальное количество сохраняемых записей TaskRun.
task_min_schedule_interval_s10Минимальный интервал для выполнения Task. Единица измерения: секунды.

Примеры

Пример 1: Отправка асинхронной задачи для CREATE TABLE tbl1 AS SELECT * FROM src_tbl с указанием имени задачи etl0:

SUBMIT TASK etl0 AS CREATE TABLE tbl1 AS SELECT * FROM src_tbl;

Пример 2: Отправка асинхронной задачи для INSERT INTO tbl2 SELECT * FROM src_tbl с указанием имени задачи etl1:

SUBMIT TASK etl1 AS INSERT INTO tbl2 SELECT * FROM src_tbl;

Пример 3: Отправка асинхронной задачи для INSERT OVERWRITE tbl3 SELECT * FROM src_tbl:

SUBMIT TASK AS INSERT OVERWRITE tbl3 SELECT * FROM src_tbl;

Пример 4: Отправка асинхронной задачи для INSERT OVERWRITE insert_wiki_edit SELECT * FROM source_wiki_edit без указания имени задачи и с увеличением тайм-аута запроса до 100000 секунд с помощью подсказки:

SUBMIT /*+set_var(insert_timeout=100000)*/ TASK AS
INSERT OVERWRITE insert_wiki_edit
SELECT * FROM source_wiki_edit;

Пример 5: Создание асинхронной задачи для оператора INSERT OVERWRITE. Задача будет регулярно выполняться с интервалом в 1 минуту.

SUBMIT TASK
SCHEDULE EVERY(INTERVAL 1 MINUTE)
AS
INSERT OVERWRITE insert_wiki_edit
SELECT dt, user_id, count(*)
FROM source_wiki_edit
GROUP BY dt, user_id;

Пример 6: Создание задачи с пользовательскими свойствами сессии:

SUBMIT TASK test_task
PROPERTIES (
"session.enable_profile" = "true",
"session.insert_timeout" = "10000"
)
AS insert into t2 select * from t1;