SUBMIT TASK
SUBMIT TASK отправляет ETL-оператор как асинхронную задачу.
Вы можете использовать этот оператор для:
- выполнения длительных задач в фоновом режиме (поддерживается начиная с версии 2.5)
- планирования задачи с регулярным интервалом (поддерживается начиная с версии 3.3)
Поддерживаемые операторы включают:
- CREATE TABLE AS SELECT (начиная с версии 3.0)
- INSERT (начиная с версии 3.0)
- CACHE SELECT (начиная с версии 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_second | 86400 | Период, в течение которого Task действителен. Единица измерения: секунды. Задачи, превышающие срок действия, удаляются. Здесь Task означает непериодическую задачу, которая выполняется только один раз. |
| task_check_interval_second | 3600 | Интервал времени для удаления недействительных задач. Единица измерения: секунды. |
| task_runs_ttl_second | 86400 | Период, в течение которого TaskRun действителен. Единица измерения: секунды. TaskRun, превышающие срок действия, автоматически удаляются. Кроме того, TaskRun в состояниях FAILED и SUCCESS также автоматически удаляются. TaskRun — это отдельный запуск периодической задачи. |
| task_runs_concurrency | 4 | Максимальное количество TaskRun, которые могут выполняться параллельно. |
| task_runs_queue_length | 500 | Максимальное количество TaskRun, ожидающих выполнения. Если число превышает значение по умолчанию, входящие задачи будут приостановлены. |
| task_runs_max_history_number | 10000 | Максимально е количество сохраняемых записей TaskRun. |
| task_min_schedule_interval_s | 10 | Минимальный интервал для выполнения 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;