任务参数场景示例

本页提供任务参数在常见业务场景中的完整用法,包含 SQL 任务和 Python 任务示例,以及常见问题解答。

场景示例

场景1:处理昨天的分区数据

需求:每天凌晨处理前一天的订单数据。

INSERT OVERWRITE TABLE order_summary PARTITION(dt='${yesterday}') SELECT order_id, SUM(amount) AS total_amount, COUNT(*) AS order_count FROM order_detail WHERE dt = '${yesterday}' GROUP BY order_id;

参数配置

yesterday
yesterday
=
$[yyyy-MM-dd, -1d]
$[yyyy-MM-dd, -1d]

假设任务在 2023-09-22 执行,

${yesterday}
${yesterday}
替换为
2023-09-21
2023-09-21


场景2:生成月报(上月数据统计)

需求:每月1号生成上月的销售报表。

SELECT product_id, SUM(sales_amount) AS total_sales, COUNT(DISTINCT user_id) AS unique_users FROM sales_table WHERE dt BETWEEN '${last_month_start}' AND '${last_month_end}' GROUP BY product_id;

参数配置

  • last_month_start
    last_month_start
    =
    first_day_of_month('yyyy-MM-dd', '-1mon')
    first_day_of_month('yyyy-MM-dd', '-1mon')
  • last_month_end
    last_month_end
    =
    last_day_of_month('yyyy-MM-dd', '-1mon')
    last_day_of_month('yyyy-MM-dd', '-1mon')

假设在 2023-09-01 执行:

last_month_start
last_month_start
2023-08-01
2023-08-01
last_month_end
last_month_end
2023-08-31
2023-08-31


场景3:周报统计(上周一到周日)

需求:每周一生成上周的用户活跃报告。

SELECT DATE(login_time) AS login_date, COUNT(DISTINCT user_id) AS active_users FROM user_login_log WHERE dt BETWEEN '${last_week_monday}' AND '${last_week_sunday}' GROUP BY DATE(login_time) ORDER BY login_date;

参数配置

  • last_week_monday
    last_week_monday
    =
    first_day_of_week('yyyy-MM-dd', '-1w')
    first_day_of_week('yyyy-MM-dd', '-1w')
  • last_week_sunday
    last_week_sunday
    =
    last_day_of_week('yyyy-MM-dd', '-1w')
    last_day_of_week('yyyy-MM-dd', '-1w')

假设在 2023-09-25(周一)执行:

last_week_monday
last_week_monday
2023-09-18
2023-09-18
last_week_sunday
last_week_sunday
2023-09-24
2023-09-24


场景4:获取每周二的数据

需求:定期分析每周二的促销活动效果。

SELECT promotion_id, SUM(sales_amount) AS tuesday_sales FROM sales_table WHERE dt = '${this_tuesday}' GROUP BY promotion_id;

参数配置

this_tuesday
this_tuesday
=
get_day_of_week('yyyy-MM-dd', 2)
get_day_of_week('yyyy-MM-dd', 2)

  • 任务在 2023-09-22(周五)执行 →
    2023-09-19
    2023-09-19
    (本周二)
  • 任务在 2023-09-25(周一)执行 →
    2023-09-26
    2023-09-26
    (本周二)

场景5:时间戳范围查询(查询今天全天数据)

需求:查询今天 00:00:00 到明天 00:00:00 之间的订单数据。

SELECT order_id, order_time, amount FROM orders WHERE order_timestamp >= ${today_start} AND order_timestamp < ${tomorrow_start};

参数配置

  • today_start
    today_start
    =
    biz_timestamp()
    biz_timestamp()
  • tomorrow_start
    tomorrow_start
    =
    biz_timestamp(1d)
    biz_timestamp(1d)

假设在 2023-09-22 执行:

today_start
today_start
1695312000000
1695312000000
tomorrow_start
tomorrow_start
1695398400000
1695398400000


场景6:Python 任务中使用参数

字符串类型参数需要加引号:

yesterday = '${yesterday}' task_name = '${task_name}'

数值类型参数不加引号:

start_ts = ${start_ts} print(f"处理日期:{yesterday}") print(f"开始时间戳:{start_ts}") sql = f""" SELECT * FROM orders WHERE dt = '{yesterday}' AND create_time >= {start_ts} """

参数配置

  • yesterday
    yesterday
    =
    $[yyyy-MM-dd, -1d]
    $[yyyy-MM-dd, -1d]
  • start_ts
    start_ts
    =
    biz_timestamp()
    biz_timestamp()
  • task_name
    task_name
    =
    sys_task_name
    sys_task_name

常见问题

Q1:临时运行和调度运行的参数有什么区别?

维度临时运行调度运行
参数来源弹窗手动输入参数配置中的取值
生效范围仅本次运行每次调度都生效
时间基准点击运行的时刻调度计划时间
sys_task_*
sys_task_*
参数
不支持支持
适用场景调试、验证生产环境自动运行

临时运行时输入的参数值不会保存到参数配置中。

Q2:如何验证参数配置是否正确?

在 SQL 任务中运行以下语句,直接查看替换结果:

SELECT '${yesterday}' AS yesterday; -- 参数配置:yesterday = $[yyyy-MM-dd, -1d] -- 如果返回昨天的日期,说明参数配置正确

也可以在执行日志中查看实际执行的 SQL,确认参数是否被正确替换。

Q3:如何处理月末日期偏移问题?

$[yyyy-MM-dd, -1mon]
$[yyyy-MM-dd, -1mon]
在月末可能产生歧义(如1月31日减1个月)。需要明确"上月最后一天"时,使用
last_day_of_month()
last_day_of_month()

-- 推荐:明确取上月最后一天 last_month_end = last_day_of_month('yyyy-MM-dd', '-1mon') -- 始终返回上月最后一天,不受当月天数影响

Q4:如何调试复杂的参数表达式?

逐步验证,从简单到复杂:

-- 第1步:验证基础格式 SELECT '${base_date}' AS base_date; -- base_date = $[yyyy-MM-dd] -- 第2步:加偏移量 SELECT '${offset_date}' AS offset_date; -- offset_date = $[yyyy-MM-dd, -1mon] -- 第3步:加多个偏移量 SELECT '${final_date}' AS final_date; -- final_date = $[yyyy-MM-dd, -1mon, -7d]

Q5:参数加密后如何修改?

  1. 点击参数配置,找到加密的参数
  2. 取消勾选"加密取值",参数值明文显示
  3. 修改完成后重新勾选"加密取值"

加密仅影响显示,不影响参数的实际替换行为。


相关文档

联系我们
预约咨询
微信咨询
电话咨询