跳到主要内容
版本: 最新版本-3.5

SUBMIT TASK

SUBMIT TASK 提交一个 ETL 语句作为一个异步任务。

您可以使用此语句来

  • 在后台执行长时间运行的任务(从 v2.5 开始支持)
  • 按固定时间间隔安排任务(从 v3.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 的任务,该任务具有会话属性,可以启用查询 profile 并增加查询超时时间

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 语句。 StarRocks 目前支持为 CREATE TABLE AS SELECTINSERT 提交异步任务。

使用说明

此语句创建一个 Task,它是一个存储执行 ETL 语句的任务的模板。您可以通过查询 Information Schema 中的元数据视图 tasks 来查看 Task 的信息。

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

在您运行 Task 之后,会相应地生成一个 TaskRun。TaskRun 指示一个执行 ETL 语句的任务。TaskRun 具有以下状态

  • PENDING: 任务等待运行。
  • RUNNING: 任务正在运行。
  • FAILED: 任务失败。
  • SUCCESS: 任务成功运行。

您可以通过查询 Information Schema 中的元数据视图 task_runs 来查看 TaskRun 的状态。

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

通过 FE 配置项配置

您可以使用以下 FE 配置项配置异步 ETL 任务

参数默认值描述
task_ttl_second86400Task 有效的期间。单位:秒。超过有效期的任务将被删除。此处,Task 指示仅执行一次的非定期任务。
task_check_interval_second3600删除无效 Task 的时间间隔。单位:秒。
task_runs_ttl_second86400TaskRun 有效的期间。单位:秒。超过有效期的 TaskRun 将自动删除。此外,状态为 FAILEDSUCCESS 的 TaskRun 也会自动删除。TaskRun 是定期任务的单独运行。
task_runs_concurrency4可以并行运行的 TaskRun 的最大数量。
task_runs_queue_length500等待运行的 TaskRun 的最大数量。如果数量超过默认值,则传入的任务将被暂停。
task_runs_max_history_number10000要保留的 TaskRun 记录的最大数量。
task_min_schedule_interval_s10Task 执行的最小间隔。单位:秒。

示例

示例 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 异步任务,并使用 hint 将查询超时时间延长至 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;