SUBMIT TASK
SUBMIT TASK 提交一个 ETL 语句作为一个异步任务。
您可以使用此语句来
- 在后台执行长时间运行的任务(从 v2.5 开始支持)
- 按固定时间间隔安排任务(从 v3.3 开始支持)
支持的语句包括
- CREATE TABLE AS SELECT (从 v3.0 开始支持)
- INSERT (从 v3.0 开始支持)
- CACHE SELECT (从 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 SELECT 和 INSERT 提交异步任务。 |
使用说明
此语句创建一个 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_second | 86400 | Task 有效的期间。单位:秒。超过有效期的任务将被删除。此处,Task 指示仅执行一次的非定期任务。 |
task_check_interval_second | 3600 | 删除无效 Task 的时间间隔。单位:秒。 |
task_runs_ttl_second | 86400 | TaskRun 有效的期间。单位:秒。超过有效期的 TaskRun 将自动删除。此外,状态为 FAILED 和 SUCCESS 的 TaskRun 也会自动删除。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
异步任务,并使用 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;