SuperAPI AI 工具集

starrocks-etl-and-tasks

数据与分析

查看项目

更新于 10-16 06:57

技能介绍

用途

StarRocks ETL and Tasks 用于在 StarRocks 中设计 ETL 管道,并通过 SUBMIT TASK 以异步或定时方式执行。它适合以下场景:设计批量、增量或实时 ETL 管道;在后台运行长时间 INSERT/CTAS 以避免客户端超时;在 StarRocks 内部原生调度周期性转换;回填或迁移数据;实现 SCD Type 2 维度。

相关技能:starrocks-data-loading 提供底层加载方法;starrocks-materialized-views 可作为定时聚合任务的替代方案;starrocks-table-design 用于暂存表与目标表结构设计。

主要能力:ETL 管道模式

模式 1:从 S3 的每日批量加载

分四步:先用 LOAD LABEL 将原始数据加载到暂存表(DATA INFILE 指向 s3://bucket/data/{{ ds }}/*.parquet,FORMAT AS "parquet",WITH BROKER 配置 aws.s3.access_key、aws.s3.secret_key、aws.s3.region,PROPERTIES 设置 timeout);等待加载完成并检查状态;再用 INSERT INTO ... PARTITION 将转换后的数据写入最终表;最后 TRUNCATE TABLE 清理暂存表。

模式 2:带去重的增量加载

使用主键表实现自动去重。示例创建 user_profiles 表,PRIMARY KEY (user_id),DISTRIBUTED BY HASH(user_id) BUCKETS 16,PROPERTIES 设置 enable_persistent_index = true。通过 Stream Load(curl 命令,-H "label:..."、-H "format:json",指向 /api/mydb/user_profiles/_stream_load)加载增量数据,每个 user_id 只保留最新记录。

模式 3:实时聚合管道

分四步:创建按小时分区的原始事件表 raw_events(DUPLICATE KEY (event_time),PARTITION BY date_trunc('hour', event_time),DISTRIBUTED BY HASH(user_id) BUCKETS 64);通过 Kafka Routine Load 持续加载(CREATE ROUTINE LOAD,设置 desired_concurrent_number、max_batch_interval、format);创建异步物化视图 mv_events_5min(REFRESH ASYNC START(...) EVERY(INTERVAL 5 MINUTE)),按分钟分桶聚合 event_count、unique_users、avg_processing_time;最后查询该物化视图供仪表盘使用。

模式 4:SCD Type 2(缓慢变化维度)

UPDATE 仅适用于主键表,因此历史表必须是主键表(将 valid_from 纳入主键,以便每个 user_id 保留多个版本)。事务注意事项:显式事务需要 v3.5+;事务内 UPDATE 需要 v4.0+ 的 shared-data 集群,且必须位于同一表的 INSERT 之前。其他部署方式下应分别执行两条语句,而不要用 BEGIN/COMMIT 包裹。示例先 UPDATE 关闭现有当前记录(设置 valid_to = NOW()、is_current = false),再 INSERT 新的当前记录。

使用方式:SUBMIT TASK

SUBMIT TASK 在后台异步运行 ETL 语句,自 v2.5 起可用,自 v3.3 起支持定时执行。

适用场景:长时间运行的 INSERT INTO ... SELECT(避免客户端超时);定时周期性 ETL(内置调度器,EVERY 间隔);大结果集的 CTAS;INSERT OVERWRITE 分区刷新;回填/数据迁移。

不适用场景:需要在同一会话立即拿到结果;操作只需数秒完成(开销不划算);已有 Airflow/dbt 编排管道。

语法:

SUBMIT TASK <task_name> [SCHEDULE [START(<schedule_start>)] EVERY(INTERVAL <schedule_interval>)] [PROPERTIES("key" = "value" [, ...])] AS <etl_statement>

支持的 ETL 语句:CREATE TABLE AS SELECT(v3.0+)、INSERT INTO / INSERT OVERWRITE(v3.0+)、CACHE SELECT(v3.3+)。

示例包括:一次性后台任务(backfill_2024);定时循环任务(refresh_5min_agg,EVERY(INTERVAL 5 MINUTE));带开始时间的定时任务(daily_summary,SCHEDULE START('2024-01-01 00:00:00') EVERY(INTERVAL 1 DAY));带会话属性的任务(heavy_etl,设置 session.insert_timeout、session.enable_profile);作为后台任务的 CTAS(create_snapshot)。

任务监控与删除

查询 information_schema.tasks 列出所有已注册任务(task_name、schedule、create_time、definition);查询 information_schema.task_runs 查看执行历史或筛选 state = 'FAILED' 的失败运行。删除任务使用 DROP TASK daily_summary(名称用反引号包裹以避免解析失败)。

FE 配置调优

task_runs_concurrency:默认 4,最大并行 TaskRun 数。 task_runs_queue_length:默认 500,最大待处理 TaskRun 数。 task_runs_ttl_second:默认 604800,TaskRun 记录 TTL(秒,7 天)。 task_ttl_second:默认 86400,一次性任务模板 TTL(秒)。 task_min_schedule_interval_s:默认 10,最小调度间隔(秒)。

限制

UPDATE 仅支持主键表;显式事务需 v3.5+,事务内 UPDATE 需 v4.0+ shared-data 集群且须在 INSERT 之前;SUBMIT TASK 自 v2.5 起可用、定时执行自 v3.3 起可用;CTAS 与 INSERT 语句支持自 v3.0 起,CACHE SELECT 自 v3.3 起。