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