Перейти к основному содержимому

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.query_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-выражение. Вы можете проверить информацию о задаче, запросив представление метаданных tasks в Information Schema.

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

После запуска задачи соответственно генерируется 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_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Минимальный интервал для выполнения задачи. Единица: секунды.

Примеры

Пример 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(query_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.query_timeout" = "10000"
)
AS insert into t2 select * from t1;